Как изменить ListView ListFragment после использования ViewFlipper's showNext()?
У меня есть ListFragment с пользовательским макетом. То, что я пытаюсь сделать, это переключить мой ListView в том же макете с помощью анимации ViewFlipper. Это на самом деле работает, но так как я использую ArrayAdapter для заполнения обоих ListViews, 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));
Любой совет? Заранее спасибо.
1 ответ
У вас есть два элемента с одинаковым идентификатором в вашем видоискателе, так что действие будет использовать только один. Чтобы сделать это, вам нужно изменить текущую ListActivity на FragmentActivity, а затем создать две отдельные операции ListFragment для обработки каждого списка.
Помните, что некоторые из этих имен классов могут изменяться в зависимости от того, используете ли вы библиотеку поддержки, но в целом между ними очень мало различий.
Для макетов просто поместите два LinearLayouts для фрагментов в их собственный XML-файл и включите их в XML-файл viewFlipper.
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
& 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>
С точки зрения кода, у вас будет основная деятельность, которая координирует данные и все остальное, и два фрагмента списка, которые обрабатывают каждый список отдельно. Основной вид деятельности также должен отслеживать, какая из них видна и т. Д.
Основная деятельность - расширяется 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
,