请原谅我,如果标题有点模糊,我在解决这个问题时遇到了问题,这也是我无法通过谷歌找到任何例子的原因。
我在我的应用程序中使用主/详细信息流布局,因为我主要在平板电脑上开发。
实现遵循通常的模式,两个片段包含在一个Activity中,我让它完美运行。在这种情况下,详细信息实际上是ViewPager
,ViewPager
和ListView
是显示相同数据的替代形式。
因此,选择列表中的项目会将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应用程序,它具有主要的详细信息流和无缝更新。这个地方有代码示例吗?
提前致谢。