我有ArrayList
个类MyClass
的对象,每个对象都有四个字段(即firstItem
,secondItem
,thirdItem
和{{1} }}),前三个需要显示在fourthItem
的{{1}}中。 为此,我扩展了ListView
,并覆盖了其ListFragment
方法,如下所示:
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;
}
字段(在{{ 1}})在单独的ListView
(fourthItem
)。
该程序会根据TextView
中的项目点击添加新片段,如下所示但问题是如何获取Fragment
字段的值detailsFragment
字段1}}用户点击了相应ListView
项的对象,以便我可以在fourthItem
中的MyClass
设置
在上面提到的第一个ListView
:
TextView
实施detailsFragment
,这意味着包含ListFragment
个对象的ListFragment
会传递到LoaderManager.LoaderCallBacks<List<MyClass>>
的{{1}}方法:
List
我们有MyClass
方法,用于实例化新LoaderManager.LoaderCallBacks
以在其中显示onLoadFinished()
:
@Override
public void onLoadFinished(Loader<List<MyClass>> loader, List<MyClass> dataList) {
customArrayListAdapter.setData(dataList);
if (isResumed()) {setListShown(true);} else {setListShownNoAnimation(true);}
}
答案 0 :(得分:3)
您可以使用getItem
调用适配器的getListAdapter
方法从ListView中获取选定的行项目对象:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
MyClass class = (MyClass)getListAdapter().getItem(position);
}
答案 1 :(得分:1)
通过使用setTag()
和getTag()
机制使您的视图记住某些内容,可以是一个对象,一个整数字符串或您喜欢的任何内容。
在getView()
中设置它 view.SetTag(myClassItem );
在onItemClickListener()中使用getTag()从项目
中检索数据@Override
public void onListItemClick(ListView l, View v, int position, long id) {
MyClass class = (MyClass) v.getTag();
}
答案 2 :(得分:1)
像这样改变你的方法
private void showDetailsFragment(int index) {
String fourthItem = ((MyClass)getListAdapter().getItem(index)).fourthItem;
DetailsFragment detailsFragment = DetailsFragment.newInstance(fourthItem);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.myActivity_frameLayout1, detailsFragment);
fragmentTransaction.commit();
}
在此之后,您必须将newInstance()
DetailsFragment
中传递的参数类型更改为String
,然后只显示该参数。