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
,并简单地显示它