【问题标题】:How to pass extra data of a list view to another activity in Android?如何将列表视图的额外数据传递给 Android 中的另一个活动?
【发布时间】:2016-11-24 06:11:20
【问题描述】:

我正在尝试在父列表 (MainActivity) 中创建一个只有“名称”的列表视图,并将剩余的“电子邮件”和“移动设备”与“名称”一起传递给另一个活动 (SingleContactActivity)。我怎样才能做到这一点?现在我的 MainActivity 列表视图显示了所有详细信息、姓名、电子邮件、手机,我知道我必须从这里删除一些东西。我的第二个活动结果还可以。但 MainActivity 必须仅显示带有“名称”的列表。为此,我需要更改 MainActivity 代码。问题是我是 JAVA 和 Android 编程的新手。我希望您能准确显示要从 MainActivity 中删除哪一行,以便它在列表中仅显示“名称”,并将其他两个参数“电子邮件”和“移动设备”与“名称”一起传递给第二个活动。

public class MainActivity extends AppCompatActivity {

    private String TAG = MainActivity.class.getSimpleName();

    private ProgressDialog pDialog;
    private ListView lv;

    // URL to get contacts JSON
    private static String url = "http://api.androidhive.info/contacts/";

    ArrayList<HashMap<String, String>> contactList;

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

        contactList = new ArrayList<>();

        lv = (ListView) findViewById(R.id.list);

        new GetContacts().execute();
    }

    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    JSONArray contacts = jsonObj.getJSONArray("contacts");

                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);

                        String id = c.getString("id");
                        String name = c.getString("name");
                        String email = c.getString("email");
                        String address = c.getString("address");
                        String gender = c.getString("gender");

                        // Phone node is JSON Object
                        JSONObject phone = c.getJSONObject("phone");
                        String mobile = phone.getString("mobile");
                        String home = phone.getString("home");
                        String office = phone.getString("office");

                        // tmp hash map for single contact
                        HashMap<String, String> contact = new HashMap<>();

                        // adding each child node to HashMap key => value
                        contact.put("id", id);
                        contact.put("name", name);
                        contact.put("email", email);
                        contact.put("mobile", mobile);

                        // adding contact to contact list
                        contactList.add(contact);
                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });
                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this, contactList,
                    R.layout.list_item, new String[]{"name", "email",
                    "mobile"}, new int[]{R.id.name,
                    R.id.email, R.id.mobile});

            lv.setAdapter(adapter);
        }
    }
}

【问题讨论】:

标签: android json listview android-intent


【解决方案1】:

您可以将数据保存在捆绑包中并在下一个活动中进行。或者你也可以使用共享偏好来临时保存数据,下一个活动你从共享偏好中获取数据然后清除它。 https://www.tutorialspoint.com/android/android_shared_preferences.htm

【讨论】:

  • 我澄清了我的问题,请重新阅读。感谢您的帮助。
【解决方案2】:

尝试使用意图进入第二个活动。并传递您的变量以显示在第二个活动中,如下所示:

在 onPostExecute 函数或您想要的任何其他事件中使用它

Intent intent = new Intent(activity1.this, activity2.class);
intent.putExtra("name", namestringvariable);
intent.putExtra("email", emailstringvariable);
startActivity(intent);
finish();

在第二个活动中

Bundle bundle = getIntent().getExtras();
String name= bundle.getString("name");
String email= bundle.getString("email");

【讨论】:

  • 亲爱的 Adi,我有你在我的第二个活动中编写的代码。我不必对第二个活动进行任何修改,问题在于第一个活动。现在我的 MainActivity 列表视图显示了所有详细信息、姓名、电子邮件、手机,我知道我必须从这里删除一些东西。我的第二个活动结果还可以。但 MainActivity 必须仅显示带有“名称”的列表。我希望您能准确显示要从 MainActivity 中删除哪一行,以便它在列表中仅显示“名称”,并将其他两个参数“电子邮件”和“移动设备”与“名称”一起传递给第二个活动。
  • 你从哪里得到这个“R.id.email”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2012-01-13
  • 2011-09-14
相关资源
最近更新 更多