Android onListItemClick:如何获取一个对象,该对象的字段显示在单击的ListView项目中?
我有一个Android onListItemClick:如何获取一个对象,该对象的字段显示在单击的ListView项目中?,android,listview,android-fragments,android-listview,android-arrayadapter,Android,Listview,Android Fragments,Android Listview,Android Arrayadapter,我有一个MyClass类对象的ArrayList,每个都有四个字段(即firstItem、secondItem、thirdItem和fourthItem),其中前三个字段需要显示在列表片段的列表视图中为此,我扩展了ArrayAdapter,并覆盖了它的getView()方法,如下所示: @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if (
MyClass
类对象的ArrayList
,每个都有四个字段(即firstItem
、secondItem
、thirdItem
和fourthItem
),其中前三个字段需要显示在列表片段的列表视图中为此,我扩展了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;
}
但是,当用户从列表视图
中单击一个项目时,对象的第四项
字段(其其他字段显示为单击的列表视图项目)应以单独的片段(详细信息片段
)显示(在文本视图中)
程序在点击列表视图
中的一个项目时添加新的片段,如下所示,但问题是如何获取用户点击了相应列表视图
项目的第四项
字段的值,这样我就可以在详细信息片段的文本视图中设置它了
在提到的第一个列表片段中:
ListFragment
实现了LoaderManager.LoaderCallBacks
,这意味着包含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);}
}
通过使用setTag()
和getTag()
机制让视图记住一些东西,可以是对象、整数、字符串或任何您喜欢的东西
在getView()中设置此选项
在onItemClickListener()中使用getTag()从项中检索数据
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
MyClass class = (MyClass) v.getTag();
}
通过使用setTag()
和getTag()
机制让视图记住一些东西,可以是对象、整数、字符串或任何您喜欢的东西
在getView()中设置此选项
在onItemClickListener()中使用getTag()从项中检索数据
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
MyClass class = (MyClass) v.getTag();
}
通过调用适配器的getListAdapter
方法,可以从ListView中获取选定的行项目对象,方法如下:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
MyClass class = (MyClass)getListAdapter().getItem(position);
}
通过调用适配器的getListAdapter
方法,可以从ListView中获取选定的行项目对象,方法如下:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
MyClass class = (MyClass)getListAdapter().getItem(position);
}
像这样改变你的方法
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();
}
在此之后,您必须将DetailsFragment
的newInstance()
中传递的参数类型更改为String
,并简单地显示它。像这样更改您的方法
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();
}
在此之后,您必须将DetailsFragment
的newInstance()
中传递的参数类型更改为String
,并简单地显示它