保持列表视图和查看寻呼机同步

时间:2014-01-17 00:12:46

标签: android listview android-viewpager

请原谅我,如果标题有点模糊,我在解决这个问题时遇到了问题,这也是我无法通过谷歌找到任何例子的原因。

我在我的应用程序中使用主/详细信息流布局,因为我主要在平板电脑上开发。 Master/Detail Flow:

实现遵循通常的模式,两个片段包含在一个Activity中,我让它完美运行。在这种情况下,详细信息实际上是ViewPagerViewPagerListView是显示相同数据的替代形式。

因此,选择列表中的项目会将ViewPager滚动到该位置,然后向右滑动将更新列表中的所选项目。

这是我到目前为止所拥有的:

MainActivity.java

    public class MainActivity extends ActionBarActivity
        implements VideoListFragment.Callbacks, VideoDetailFragment.Callbacks {

    @Override
    public void onItemSelected(String callingClass, int id) {

        //Work out which one we're updating based on which class called this method
        if (callingClass == VideoListFragment.VIDEO_LIST_ID) {
            //Update the VideoDetail
            VideoDetailFragment fragment = (VideoDetailFragment) getSupportFragmentManager().findFragmentById(R.id.content_pane);
            if (fragment != null) {
                fragment.setViewPagerPosition(id);
            } else {
                Bundle arguments = new Bundle();
                arguments.putInt(VideoDetailFragment.VIDEO_ID, id);
                fragment = new VideoDetailFragment();
                fragment.setArguments(arguments);
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.content_pane, fragment)
                        .commit();
            }
        } else if (callingClass == VideoDetailFragment.VIDEO_DETAIL_ID) {
            //Update the VideoList
            VideoListFragment fragment = (VideoListFragment) getSupportFragmentManager().findFragmentById(R.id.list_pane);
            fragment.setSelection(id);
        }
    }
}

ListFragment.java

public class ListFragment extends ListFragment {

    public interface Callbacks {
        public void onItemSelected(String callingClass, int id);
    }

    @Override
    public void onListItemClick(ListView listView, View view, int position, long id) {
        super.onListItemClick(listView, view, position, id);
        setSelection(position);
        mCallbacks.onItemSelected(VIDEO_LIST_ID, position);
    }

    @Override
    public void setSelection(int position) {
        mListView.setItemChecked(position, true);
        mListView.smoothScrollToPosition(position);
    }
}

VideoDetailFragment.java

    public class VideoDetailFragment extends Fragment {

    public interface Callbacks {
        public void onItemSelected(String callingClass, int id);
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //Left
        if (mListPosition > position + positionOffset) {
            mCallbacks.onItemSelected(VIDEO_DETAIL_ID, position);
        } else //Right
        {
            mCallbacks.onItemSelected(VIDEO_DETAIL_ID, position);
        }
    }
}

这是一个非常基本的系统,但它在很大程度上起作用,唯一的问题是系统在刷新视图时经常调用onPageScrolled,例如下载新数据时notifyDatasetChanged叫做。这会导致大量的往返列表视图选择上下飞扬,整体看起来很俗气。

我想要的一个很好的例子是GMail应用程序,它具有主要的详细信息流和无缝更新。这个地方有代码示例吗?

提前致谢。

0 个答案:

没有答案