我有一个带有自定义布局的ListFragment。我想要做的是使用ViewFlipper动画在同一布局中切换我的ListView。这实际上有效,但是当我使用ArrayAdapter来填充两个ListView时,setListAdapter()似乎没有刷新我的第二个ListView,即使我在调用showNext()之后使用它也很难。如何告诉我的ListFragment我已经更改了视图?它甚至可能吗?。
这是我的自定义布局,因为我也使用自定义ListView,所以我必须为两个列表使用android:id =“@ id / android:list”。
<LinearLayout>
<TextView/>
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
</LinearLayout>
<LinearLayout>
<TextView/>
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
</LinearLayout>
</ViewFlipper>
这是我的代码的一部分:
headerFlipper = (ViewFlipper)getActivity().findViewById(R.id.viewFlipper);
headerFlipper.showNext();
// at this point a simple getListView() returns the same first ListView object.
// this changes the first ListView (not visible anymore)
// how to change the second one?
setListAdapter(new ArrayAdapter<DummyContent.DummyMessage>(getActivity(),
android.R.layout.simple_list_item_activated_1,
android.R.id.text1, DummyContent.MESSAGES));
有什么建议吗? 提前谢谢。
答案 0 :(得分:2)
您的viewflipper中有两个具有相同ID的项目,因此活动仅使用一个。要像这样执行,您需要将当前的ListActivity更改为FragmentActivity,然后创建两个单独的ListFragment活动来处理每个列表。
请记住,其中一些类名可能会因您使用支持库而改变,但总体而言,它们之间的差异很小。
对于布局,只需将片段的两个LinearLayouts放在它们自己的xml文件中,并将它们包含在viewFlipper xml中。
viewflipper.xml
<?xml version="1.0" encoding="utf-8"?>
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewFlipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<include
android:id="@+id/fragListOne"
layout="@layout/listfragmentone" />
<include
android:id="@+id/fragListTwo"
layout="@layout/listfragmenttwo" />
</ViewFlipper>
然后对于每个片段,你可以使用类似的东西:
listfragmentone
&amp; listfragmenttwo
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="8dp"
android:paddingRight="8dp">
<ListView android:id="@+id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00FF00"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
<TextView android:id="@id/android:empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0000"
android:text="No data"/>
</LinearLayout>
代码方面,您将拥有协调数据和所有内容的主要活动,以及分别处理每个列表视图的两个listview片段。主要活动还需要跟踪哪一个是可见的等等。
主要活动 - 扩展FragmentActivity
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.viewFlipper);
// use fragment manager to see which fragments are instantiated
// and available, then reuse any available in case of
// orientation change
FragmentManager.enableDebugLogging(true)
FragmentManager fragManager = getSupportFragmentManager();
ListFragmentOne fragOne = fragManager.findFragmentById("frag one tag");
// if fragOne is null add a new instance via an add transaction
// etc.
}
扩展ListFragment
的片段活动应与普通列表活动类似,除非您使用onCreateView
代替onCreate
。