我正试图在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>>();
答案 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>>();
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());
}
});