1

我正在尝试通过ListViewItem单击将数据从一个活动传递到另一个活动。

但是我无法访问行内的数据,以便我可以将其传递给下一个活动。

我目前的代码是:

final ListView businessListObj = (ListView) findViewById(R.id.bussinessListView);
ListAdapter adapter = new SimpleAdapter(HomeActivity.this, bussinessList,
                R.layout.business_list_item,
                new String[] { TAG_NAME, TAG_ADDRESS, TAG_ID }, new int[] {
                        R.id.name, R.id.address, R.id.businessId});
businessListObj.setAdapter(adapter);
businessListObj.setClickable(true);
businessListObj.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) 
{
     Intent detailsIntent = new Intent(HomeActivity.this, DetailActivity.class);
     startActivity(detailsIntent);
}
});

我努力了

Object o = businessListObj.getAdapter().getItem(position);

但我似乎无法弄清楚从对象中获取名称、地址和 ID 以传递给下一个活动的语法。

编辑:XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
<TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

 <TextView
        android:id="@+id/address"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
       android:id="@+id/businessId"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Small Text"
       android:textAppearance="?android:attr/textAppearanceSmall" />

编辑 2:商业清单:

ArrayList<HashMap<String, String>> businessList = new ArrayList<HashMap<String, String>>();
4

2 回答 2

0

你的代码很接近。

Object o = businessListObj.getAdapter().getItem(position);
if(o instanceof MyClass){
    MyClass myObject = (MyClass) o;
    Intent detailsIntent = new Intent(HomeActivity.this, DetailActivity.class);

    detailsIntent.putExtra("extName", myObject.getName());
    detailsIntent.putExtra("extAddress", myObject.getAddress());
    detailsIntent.putExtra("extId", myObject.getId());

    startActivity(detailsIntent);
}

更好的是让 MyClass 实现 Parcelable。然后你可以这样做:

 detailsIntent.putExtra("EXTRA_ITEM", myObject);

然后在活动中你可以做:

MyClass mMyObject = getIntent().getParcelableExtra("EXTRA_ITEM");

如果您在 Parcelable 实现方面需要帮助,请查看我构建的这个 Web 应用程序,它从 json 提要为您生成了模型类,包括使它们成为 Parcelable。

http://jsontojava.appspot.com/

我懂了。你实际上没有模型。您肯定需要使用 json to java 生成器并使用真实对象模型。每次我尝试使用 HashMap 作为我的模型时,我最终都不得不在以后重写它。

在这种情况下,

HashMap<String,String> myMap = (HashMap<String,String>) o;

然后,您可以根据需要将值从地图中拉出。

于 2013-11-07T18:22:11.797 回答
0

试试下面的。

你有这个

  ArrayList<HashMap<String, String>> businessList = new ArrayList<HashMap<String, String>>();

businessList是一个列表HashMap<String,String>

onItemClick

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            HashMap<String,String> map =(HashMap<String, String>) arg0.getItemAtPosition(arg2);
            Intent detailsIntent = new Intent(HomeActivity.this, DetailActivity.class);              
            detailsIntent.putExtra("addresskey",map.get("TAG_ADDRESS").toString());
            detailsIntent.putExtra("namekey",map.get("TAG_NAME").toString());
            detailsIntent.putExtra("idkey",map.get("TAG_ID").toString()); 
            startActivity(detailsIntent);
            // check in logcat  
            Log.i("....................",map.get("TAG_ADDRESS").toString()); 
            Log.i("....................",map.get("TAG_NAME").toString());
            Log.i("....................",map.get("TAG_ID").toString());     
        }
    });
于 2013-11-07T18:24:27.013 回答