Android 使用微调器、活动结构切换片段
目前,我有一个活动,该活动包含一个包含listfragment的布局的Android 使用微调器、活动结构切换片段,android,android-fragments,android-listfragment,fragmenttransaction,setcontentview,Android,Android Fragments,Android Listfragment,Fragmenttransaction,Setcontentview,目前,我有一个活动,该活动包含一个包含listfragment的布局的setContentView。基本上,它加载一个listview 我的actionbar包含一个微调器,可以在不同的列表中加载。我可以在后台加载列表对象,并在用户使用微调器选项切换到这些列表时更新一个片段的适配器。但这不会保留用户滚动到的位置 我想乱加载多个listfragments,当用户选择不同的微调器选项时,会发生一个片段事务,显示与该特定列表关联的其他listfragments之一 我将如何做到这一点,以及如何修改我的
setContentView
。基本上,它加载一个listview
我的actionbar包含一个微调器,可以在不同的列表中加载。我可以在后台加载列表对象,并在用户使用微调器选项切换到这些列表时更新一个片段的适配器。但这不会保留用户滚动到的位置
我想乱加载多个listfragments,当用户选择不同的微调器选项时,会发生一个片段事务,显示与该特定列表关联的其他listfragments之一
我将如何做到这一点,以及如何修改我的主机活动
我看到使用的示例包括在宿主活动的onCreate
方法中创建所有片段,而在XML中不创建片段。现在我在XML中有一个片段,需要再创建两个几乎相同的ListFragment
您看到在onCreate()方法中添加片段而不是将其直接放入XML中的原因是XML中包含的片段无法删除/修改。如果必须拥有此片段并希望加载其他片段,则可以将容器(如LinearLayout、RelativeLayout等)添加到父容器中,然后通过代码动态设置其属性。例如:
LinearLayout layoutD = new LinearLayout(this);
layoutD.setId(R.id.layoutd);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1);
layoutD.setLayoutParams(params);
layoutD.setOrientation(LinearLayout.VERTICAL);
parent.addView(layoutD); // parent is a reference to the parent widget in the XML
getSupportFragmentManager.beginTransaction().add(R.id.layoutd, your_fragment_here).addToBackStack(null).commit();
希望这有帮助。您似乎可以通过编程方式从以下位置滚动列表视图: 对于直接/平滑滚动:
getListView().setSelection(21);
getListView().smoothScrollToPosition(21);
在ListView的getView方法中,可以记录最后渲染的视图的位置
@Override
public View getView(int position, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
因此,当您重置listview时,只需保留用户滚动位置的整数记录,就可以滚动到用户所在的上一个位置
我知道你也在考虑碎片解决方案。我知道“replace”方法会导致被替换的片段破坏它的视图(至少“support”片段是这样处理的)。因此,在这种情况下,您仍然会返回一个失去滚动状态的listview。您可以尝试隐藏/显示片段事务,因为它们可能会保留其视图,从而保持滚动状态
如果您尝试隐藏/显示,请告诉我结果:)如果它有效,我可以自己使用。我不知道替换方法会杀死片段。由于获取listview的当前位置更容易,我可能会在我现在正在开发的应用程序中使用该路线,我不会使用Backback来处理我的frags…因此我不确定这是否会保留它;我确实看到destroyView被称为。这可能更好地回答了我的问题,以防其他人带着类似的碎片相关问题来到这里。但是@NameSpace的答案更好地解决了我的问题