在列表视图中,将java对象传递给新的android实例并单击
我有一个由api返回的json填充的列表视图。在解析json时,我创建了一个新的java对象,该对象被添加到数组列表中。然后使用数组列表构建列表视图。我可以在列表视图中单击一个项目,并得到一个祝酒词,说某个项目被单击了 我希望能够检索单个对象,以便将该对象传递给新实例,并加载新实例上的所有对象详细信息以显示给用户。我怎样才能像这样传递一个物体 我的代码:在列表视图中,将java对象传递给新的android实例并单击,java,android,android-listview,Java,Android,Android Listview,我有一个由api返回的json填充的列表视图。在解析json时,我创建了一个新的java对象,该对象被添加到数组列表中。然后使用数组列表构建列表视图。我可以在列表视图中单击一个项目,并得到一个祝酒词,说某个项目被单击了 我希望能够检索单个对象,以便将该对象传递给新实例,并加载新实例上的所有对象详细信息以显示给用户。我怎样才能像这样传递一个物体 我的代码: private class ReadJSONResult extends AsyncTask <String, Void, St
private class ReadJSONResult extends AsyncTask
<String, Void, String> {
protected String doInBackground(String... urls) {
return readJSONFeed(urls[0]);
}
protected void onPostExecute(String result) {
try {
System.out.println(result);
Log.d("asycTask", "[ Gets into asyc task ]");
///get
Log.d("search", "[ check if we get search results ]");
Log.d("search", "[" + result + "]");
JSONObject json = new JSONObject(result);
//acces listview
lv = (ListView) findViewById(android.R.id.list);
//make array list for beer
List<BeerData> beerList = new ArrayList<BeerData>();
//get json items
for(int i = 0; i < json.getJSONArray("data").length(); i++) {
String beerId = GetBeerDataFromJSON(i,"id", json);
String beerName = GetBeerDataFromJSON(i,"name", json);
String beerDescription = GetBeerDataFromJSON(i,"description" , json);
String beerAbv = GetBeerDataFromJSON(i,"abv" , json);
String beerIbu = GetBeerDataFromJSON(i,"ibu" , json);
String beerIcon = GetBeerIconsFromJSON(i, "icon",json );
String beerMediumIcon = GetBeerIconsFromJSON(i, "medium",json );
String beerGlass = GetBeerGlassFromJSON(i, json );
String beerStyle = GetBeerStyleFromJSON(i,"name", json );
String beerStyleDescription = GetBeerStyleFromJSON(i,"description", json );
String beerBreweryId = GetBeerBreweryInfoFromJSON(i, "id", json );
String beerBreweryName = GetBeerBreweryInfoFromJSON(i, "name", json );
String beerBreweryDescription = GetBeerBreweryInfoFromJSON(i, "description", json );
String beerBreweryWebsite = GetBeerBreweryInfoFromJSON(i, "website", json );
String beerBreweryYear = GetBeerBreweryInfoFromJSON(i, "established", json );
//create beer object
BeerData thisBeer = new BeerData(beerName, beerId, beerDescription, beerAbv, beerIbu, beerIcon,
beerMediumIcon, beerGlass, beerStyle, beerStyleDescription, beerBreweryId, beerBreweryName,
beerBreweryDescription, beerBreweryYear, beerBreweryWebsite);
//add beer to list
beerList.add(thisBeer);
}
//update listview
ArrayAdapter<BeerData> adapter1 = new ArrayAdapter<BeerData>(MainActivity.this, R.layout.list_item, R.id.itemName, beerList);
lv.setAdapter(adapter1);
//set up clicks
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
//on item click do this
Toast.makeText(MainActivity.this, "click worked", Toast.LENGTH_SHORT).show();
}
});
} catch (Exception e) {
Log.d("ReadBeerDataTask", e.getLocalizedMessage());
}
}
}
私有类ReadJSONResult扩展异步任务
{
受保护的字符串doInBackground(字符串…URL){
返回readJSONFeed(URL[0]);
}
受保护的void onPostExecute(字符串结果){
试一试{
系统输出打印项次(结果);
Log.d(“asycTask”,“进入asyc任务]”;
///得到
Log.d(“搜索”,“检查是否得到搜索结果”);
Log.d(“搜索“,“[”+结果+“]”);
JSONObject json=新的JSONObject(结果);
//访问列表视图
lv=(ListView)findViewById(android.R.id.list);
//列一份啤酒清单
List beerList=new ArrayList();
//获取json项
for(int i=0;i
让您的BeerData
类实现接口。那么就做:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
i.putExtra("myBeerObject", lv.getItemAtPosition(arg2));
startActivity(i);
}
});
下面是如何正确实现接口的示例。让您的
BeerData
类实现接口。那么就做:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
i.putExtra("myBeerObject", lv.getItemAtPosition(arg2));
startActivity(i);
}
});
以下是如何正确实现该接口的示例。简单的步骤可以让您做到这一点: 跟踪
BeerData
集合。在您的情况下,这将是beerList
使BeerData
实现可打包
(在OnItemClick
中使用正确的参数名称。它应该是OnItemClick(AdapterView父项、视图、int位置、长id)
”
在麦克利克
onItemClick(AdapterView<?> parent, View view, int position, long id) {
var beerData = beerList[position];
Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
intent.putExtra("BEER!", beerData);
startActivity(intent);
}
简单的步骤应允许您执行此操作: 跟踪
BeerData
集合。在您的情况下,这将是beerList
使BeerData
实现可打包
(在OnItemClick
中使用正确的参数名称。它应该是OnItemClick(AdapterView父项、视图、int位置、长id)
”
在麦克利克
onItemClick(AdapterView<?> parent, View view, int position, long id) {
var beerData = beerList[position];
Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
intent.putExtra("BEER!", beerData);
startActivity(intent);
}
使用listview onitemClickListener并使用此
lv.getItemAtPosition(arg2)
。其中arg2是获取列表项Simple的索引位置!!!将thisBeer
设为static并在任何其他类中访问它!!!!@dd619在这种情况下使用static可能不好,如果您有权访问arraylist,请使用arg2(索引)用于检索数据的beerList中的变量。稍后,如果要将对象传递给另一个活动,请确保该对象可序列化。请使用listview onitemClickListener并使用此lv.getItemAtPosition(arg2)
。其中arg2是获取列表项simple的索引位置!!!将thisBeer
设为static并在任何其他类中访问它!!!!@dd619在这种情况下使用static可能不好如果您有权访问arraylist,请使用arg2(索引)变量来检索数据。稍后,如果要将对象传递给另一个活动,请确保它是序列化的