从ListView访问行数据

时间:2013-11-07 17:36:51

标签: android android-listview

我正试图在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 :BusinessList:

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

2 个答案:

答案 0 :(得分: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到java生成器并使用真实的对象模型。每当我尝试使用HashMap作为我的模型时,我最终都要在以后重写它。

在那种情况下,

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

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

答案 1 :(得分:0)

尝试以下方法。

你有这个

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

businessListHashMap<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());     
        }
    });