【问题标题】:Passing data between activities from listview to another activity将活动之间的数据从列表视图传递到另一个活动
【发布时间】:2013-08-14 12:19:05
【问题描述】:

我正在尝试将数据从这个主要活动传递到另一个活动

我成功地在活动之间发送数据....就像通过 putExtraGetExtra 方法将数据从 Edit-text 发送到下一个活动并作为意图传递

  • 但我在这项涉及的特定任务中面临挑战 将数据从列表视图发送到普通活动
  • 数据从 JSON 填充到列表视图中,因此当单击 行如何将数据从该行发送到新活动

任何想法,


ativity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/listViewID"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 

        android:layout_gravity="center">
    </ListView>

</LinearLayout>

MainActivity.java

public class MainActivity extends Activity {

    // url to make request
    private static String url = "http://54.218.73.244:7002/";
    List<Item> yourData = new ArrayList<Item>();

    ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Instantiating ProgressDialog with onCreate method
        progressDialog=new ProgressDialog(MainActivity.this);
        new ParsingAsync().execute();

    }

    private class ParsingAsync extends AsyncTask<Void, Void, Void>
    {

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            progressDialog=ProgressDialog.show(MainActivity.this, "", "Please Wait", true, false);


        }

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub

            // Creating JSON Parser instance
            JSONObjParser jParser = new JSONObjParser();

            // getting JSON string from URL
            JSONArray json = jParser.getJSONFromUrl(url);

            try {
                for (int i = 0; i < json.length(); i++) {
                    JSONObject c = json.getJSONObject(i);

                    // Storing each json item in variable
                    String NAME=c.getString("restaurantNAME");

                    yourData.add(new Item(NAME));
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            progressDialog.dismiss();
            ListView yourListView = (ListView) findViewById(R.id.listViewID);
            ListAdapter customAdapter = new ListAdapter(MainActivity.this, R.layout.itemlistrow, yourData);
            yourListView.setAdapter(customAdapter);
            yourListView.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // When clicked, show a toast with the TextView text
                    if(position == 0)
                    {
                        //code specific to first list item    
                        Intent myIntent = new Intent(MainActivity.this,CopperChimneyDesc.class);
                        startActivity(myIntent);
                    }else if(position == 1)
                    {
                        //Intent myIntent = new Intent(MainActivity.this,AroyDesc.class);
                        //startActivity(myIntent);                  
                    }

                }
            });
        }

    }

}

item.java

public class Item{
    private String Name;

    public Item(String name){
        this.Name = name;
    }
    public String getName(){
        return Name;
    }
}

谢谢,

【问题讨论】:

  • 所以您尝试传递您在列表视图中单击的餐厅名称
  • 在onItemClick中,您可以使用:Item item = yourData.get(position);现在可以使用intent.putExtra来传递这个item了,顺便问下这个Item对象长什么样子
  • 我已经更新了项目对象在问题中的样子......请看一下......我尝试了你的解决方案,我在 putextra 行中得到错误The method putExtra(String, boolean) in the type Intent is not applicable for the arguments (String, Item)
  • 好的,所以你会这样做 String item = yourData.get(position).getName();然后您可以使用以下方法将字符串添加到意图:intent.putExtra("restaurent", item);
  • 在另一端,如果它的文本视图你会 textView.setText(getIntent().getExtras().getString("restaurent"));我会纠正这个答案,如果我解决了你的问题,请标记它是正确的

标签: android listview android-intent


【解决方案1】:

好的,你会这样做的

String item = yourData.get(position).getName(); 

然后您可以使用以下命令将string 添加到intent

intent.putExtra("restaurent", item);

另一方面,如果它的textview 你会这样做

textView.setText(getIntent().getExtras().getString("restaurent")); 

【讨论】:

  • 谢谢,您的解决方案很有魅力:)
【解决方案2】:
intent.putExtra("City Name", String.valueOf(lvCity.getSelectedItem()));

试试这个来投射。

【讨论】:

    【解决方案3】:

    您可以使用 putxtera 方法打包数据并将其发送到其他活动。请参阅How to store values in onSaveInstanceState() and retrive?

    【讨论】:

      【解决方案4】:

      由于您在用户单击的列表视图中拥有项目的索引,因此您可以从适配器获取项目值:

      String value = (String)customAdapter.getItem(position);
      Intent myIntent = new Intent(MainActivity.this,CopperChimneyDesc.class);
      intent.putExtra("restaurant_name", value);
      startActivity(myIntent);
      

      【讨论】:

      • 我尝试了您的解决方案,但出现错误Cannot cast from item to string ....关于如何解决此问题的任何想法
      【解决方案5】:

      您可以将数据保存在sharedPreferences 中,并可以从其他活动中访问它。只是一个想法:)

      【讨论】:

      • 但是如何从列表视图中获取数据(JSON)并将其存储在字符串中......有什么想法吗?
      • 如果数据是静态的,比如session_key,我认为SharePreference 是可行的方法。
      • mJsonString = downloadFileFromInternet(urls[0]); if(mJsonString == null /*|| mJsonString.isEmpty()*/) 返回 false; JSONObject jObject = null;尝试 { jObject = new JSONObject(mJsonString); JSONArray jsonImageArray = jObject.getJSONArray("imageTarget");
      猜你喜欢
      • 1970-01-01
      • 2012-07-05
      • 2013-07-11
      • 2012-11-12
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 2012-01-24
      • 2012-03-05
      相关资源
      最近更新 更多