【问题标题】:How to pass values from one activity to another using tap on List Item如何使用点击列表项将值从一项活动传递到另一项活动
【发布时间】:2014-06-04 12:42:12
【问题描述】:

我正在尝试将 ciicked listitem 数据传递给另一个活动,但每当我点击任何列表项时,都无法获取 Toast 也无法将选定的列表项值传递给另一个活动。

所以我想知道:

如何通过点击列表项将值从一个活动传递到另一个活动?

第二个

为什么不在 Toast 中显示点击的列表项位置?

MainActivity.java:

@Override
        protected void onPostExecute(Void args) {
            // Locate the listview in listview_main.xml
            listview = (ListView) findViewById(R.id.listview);
            // Pass the results into ListViewAdapter.java
            adapter = new ListViewAdapter(MainActivity.this, arraylist);
            // Set the adapter to the ListView
            listview.setAdapter(adapter);
            // Close the progressdialog
            mProgressDialog.dismiss();

            listview.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    Toast.makeText(MainActivity.this, position, Toast.LENGTH_LONG).show();
                    // TODO Auto-generated method stub
                    Intent intent = new Intent(MainActivity.this, SingleItemView.class);
                    // Pass all data rank
                    intent.putExtra("rank", arraylist.get(position).get(MainActivity.RANK));
                    // Start SingleItemView Class
                    startActivity(intent);
                }
            });         
        }

Log.d报错后,请查看下方完整日志

@Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    Toast.makeText(MainActivity.this, position, Toast.LENGTH_LONG).show();
                    // TODO Auto-generated method stub
                    Log.d("RANK::", arraylist.get(position).get(MainActivity.RANK));

日志:

06-04 18:21:12.725: E/AndroidRuntime(19957): FATAL EXCEPTION: main
06-04 18:21:12.725: E/AndroidRuntime(19957): android.content.res.Resources$NotFoundException: String resource ID #0x0
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.content.res.Resources.getText(Resources.java:242)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.widget.Toast.makeText(Toast.java:304)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at com.androidbegin.jsonparsetutorial.MainActivity$DownloadJSON$1.onItemClick(MainActivity.java:107)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.widget.AdapterView.performItemClick(AdapterView.java:301)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.widget.AbsListView.performItemClick(AbsListView.java:1280)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3071)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.widget.AbsListView$1.run(AbsListView.java:3972)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.os.Handler.handleCallback(Handler.java:615)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.os.Looper.loop(Looper.java:137)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at android.app.ActivityThread.main(ActivityThread.java:4921)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at java.lang.reflect.Method.invokeNative(Native Method)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at java.lang.reflect.Method.invoke(Method.java:511)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
06-04 18:21:12.725: E/AndroidRuntime(19957):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 你的代码有什么问题?
  • 我不知道,但每当我点击任何列表项时,都没有得到我想要的...@Raghunandan
  • 你能记录下arraylist.get(position).get(MainActivity.RANK)的值吗
  • @Raghunandan 请检查我发布的代码!
  • 第 107 行 MainActivity.java 是什么?

标签: android listview android-listview adapter baseadapter


【解决方案1】:

改变这个

Toast.makeText(MainActivity.this, position, Toast.LENGTH_LONG).show();

Toast.makeText(MainActivity.this, String.valueOf(position), Toast.LENGTH_LONG).show();

【讨论】:

    【解决方案2】:

    尝试在 onCreat 而不是 onPostExecute 中编写以下行

    listview = (ListView) findViewById(R.id.listview);
    
    listview.setOnItemClickListener(new OnItemClickListener() {
    
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
                        Toast.makeText(MainActivity.this, position, Toast.LENGTH_LONG).show();
                        // TODO Auto-generated method stub
                        Intent intent = new Intent(MainActivity.this, SingleItemView.class);
                        // Pass all data rank
                        intent.putExtra("rank", arraylist.get(position).get(MainActivity.RANK));
                        // Start SingleItemView Class
                        startActivity(intent);
                    }
                });    
    

    【讨论】:

      【解决方案3】:

      尝试使用 setTag(Object) 和 getTag() 方法。在您的 ListView 中代表行的每个视图上应用 setTag()。然后,在 onItemClick() 方法中使用“view”变量作为参数传递,以使用 getTag() 提取传递的值。您的解决方案看起来不错,但出于优化原因,建议使用标签将值传递给 onClicks。

      【讨论】:

        猜你喜欢
        • 2014-09-17
        • 2014-09-19
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-03
        • 1970-01-01
        相关资源
        最近更新 更多