【发布时间】:2015-01-09 03:25:51
【问题描述】:
我有一个ArrayList 类MyClass 的对象,每个对象有四个字段(即firstItem、secondItem、thirdItem 和fourthItem),其中前三个需要是显示在ListFragment 的ListView 中。 为此,我扩展了ArrayAdapter,并重写了它的getView()方法,如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
view = layoutInflater.inflate(
R.layout.myFragment_listview_item, parent, false);
} else {
view = convertView;
}
MyClass myClassItem = getItem(position);//******But this method is inside Adapter
((TextView) view
.findViewById(R.id.myclassListFragment_ListViewItem1))
.setText(myClassItem.firstItem);
((TextView) view
.findViewById(R.id.myclassListFragment_ListViewItem2))
.setText(myClassItem.secondItem);
((TextView) view
.findViewById(R.id.myclassListFragment_ListViewItem3))
.setText(myClassItem.thirdItem);
return view;
}
但是当用户从ListView 中单击一个项目时,该对象的fourthItem 字段应显示(在TextView 中)在一个单独的Fragment (detailsFragment)。
程序在点击ListView中的一个项目时添加新片段如下,但问题是我如何获取MyClass对象对应的fourthItem字段的值ListView 项目已被用户点击,所以我可以将它设置在detailsFragment 中的TextView 中?
在提到的第一个ListFragment:
ListFragment 实现了LoaderManager.LoaderCallBacks<List<MyClass>>,这意味着将包含MyClass 对象的List 传递给LoaderManager.LoaderCallBacks 的onLoadFinished() 方法:
@Override
public void onLoadFinished(Loader<List<MyClass>> loader, List<MyClass> dataList) {
customArrayListAdapter.setData(dataList);
if (isResumed()) {setListShown(true);} else {setListShownNoAnimation(true);}
}
我们有onListItemClick() 方法,它实例化新的detailsFragment 以在其中显示fourthItem:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
showDetailsFragment(position);
}
private void showDetailsFragment(int index) {
listViewItemPosition = index;
DetailsFragment detailsFragment = DetailsFragment.newInstance(index);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.myActivity_frameLayout1, detailsFragment);
fragmentTransaction.commit();
}
【问题讨论】:
标签: android listview android-fragments android-listview android-arrayadapter