1

我有一个由 api 返回的 json 填充的列表视图。在解析 json 时,我创建了一个新的 java 对象,该对象被添加到数组列表中。然后使用数组列表来构建列表视图。我现在可以在列表视图中单击一个项目,然后吐司说一个项目被单击。

我希望能够检索单个对象,因此我可以将对象传递给一个新实例并将所有对象详细信息加载到一个新实例上以显示给用户。我怎样才能像这样传递一个对象?

我的代码:

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

2 回答 2

4

让你的BeerData类实现Parcelable接口。然后做:

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

从第二节课开始:

Bundle b = getIntent().getExtras(); 
BeerData beer = b.getParcelable("myBeerObject"); 

这是一个如何正确实现接口的示例。

于 2013-06-18T11:00:03.213 回答
0

简单的步骤应该允许您这样做:

跟踪一个BeerData集合。这将是beerList你的情况。

制作BeerData工具Parceable

(在 中使用正确的参数名称OnItemClick。它应该是onItemClick(AdapterView<?> parent, View view, int position, long id)

在 onItemClick

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

在 NextActivity 中onCreate

{
    Bundle extras = getIntent().getExtras();
    BeerData beerData = (BeerData) extras.getParcelable("BEER!);
}
于 2013-06-18T11:06:05.870 回答