Android onListItemClick:如何获取一个对象,其字段显示在单击的ListView项中?

时间:2015-01-09 03:25:52

标签: android listview android-fragments android-listview android-arrayadapter

我有ArrayList个类MyClass的对象,每个对象都有四个字段(即firstItemsecondItemthirdItem和{{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}})在单独的ListViewfourthItem)。

该程序会根据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);}
    }

3 个答案:

答案 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,然后只显示该参数。