【问题标题】:Intent Items onClick to Activity意图项目 onClick to Activity
【发布时间】:2015-05-21 10:55:48
【问题描述】:

我有这个 ListActivity 用于显示从我的 ListViewActivity 获取的项目。

public class ListTasksActivity extends ListActivity implements AdapterView.OnItemClickListener {
    ArrayList<HashMap<String,String>> adapterItems;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent i = getIntent();

        ListView lv = getListView();
        lv.setOnItemClickListener(this);

        ArrayList<HashMap<String, String>> taskItems = (ArrayList<HashMap<String, String>>) i.getSerializableExtra("taskItems");
        String[] stringArr = i.getStringArrayExtra("adapterStringArray");
        int[] intArr = i.getIntArrayExtra("adapterIntArray");

        ListAdapter taskadapter = new SimpleAdapter(this, taskItems,
                R.layout.list_item_tasks,
                stringArr,
                intArr);

        setListAdapter(taskadapter);
        adapterItems = taskItems;
        //CustomAdapterTasks customAdapterTasks = new CustomAdapterTasks((ListViewActivity) ListViewActivity.getAppContext(),);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String[] adapterString = new String[] {"location","object_id","task_subject","task_action","object"};
        int[] adapterInt = new int[]  {R.id.singleTaskLocation,R.id.singleTaskInvNumber,R.id.singleTaskSubject,R.id.singleTaskAction,R.id.singleTaskObject};

        //neue Oberflaeche starten
        Intent in = new Intent(this,ListSingleTaskActivity.class);
        in.putExtra("adapterStringArray",adapterString);
        in.putExtra("adapterIntArray",adapterInt);
        in.putExtra("taskItems",adapterItems);

        startActivity(in);
    }
}

如果我点击一个项目,就会发生这种情况:

public class ListSingleTaskActivity extends Activity {
    private static final int CAMERA_PIC_REQUEST = 2500;

    ListView mylistview;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.single_task_layout);

        Intent i = getIntent();

        ArrayList<HashMap<String, String>> taskItems = (ArrayList<HashMap<String, String>>) i.getSerializableExtra("taskItems");
        String[] stringArr = i.getStringArrayExtra("adapterStringArray");
        int[] intArr = i.getIntArrayExtra("adapterIntArray");

        ListAdapter taskadapter = new SimpleAdapter(this, taskItems,
                R.layout.single_task_layout,
                stringArr,
                intArr)
}

我的问题是我想将点击项目中的信息发送到新活动并显示它们。上面代码的结果是他向我展示了整个项目。不仅仅是点击的那个。 怎么了?

我希望很清楚我的问题是什么。如果缺少某些内容,请发表评论

编辑:


现在我得到这个错误:

Caused by: java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.ArrayList
        at de.example.app.ListSingleTaskActivity.onCreate(ListSingleTaskActivity.java:30)

就是这一行:

ArrayList<HashMap<String, String>> taskItems = (ArrayList<HashMap<String, String>>) i.getSerializableExtra("taskItems");

【问题讨论】:

  • 您正在将整个适配器项列表发送到新活动。在新活动中,您也有一个列表视图。我建议进一步阅读和理解概念。
  • 您正在发送完整列表,只需发送adapter.get(position)
  • 哦,这太容易了,谢谢!为什么要投反对票?
  • @raymondis 有些人如果只是不喜欢某个问题而不是发表评论,就会投反对票,不用担心,每个人都会遇到这种情况。也就是说,请尽量保持您的代码示例简短。
  • 好的,谢谢:)

标签: android listview android-intent android-activity listactivity


【解决方案1】:

在 ListTasksActivity 中发送选中的数据:

Intent in = new Intent(this,ListSingleTaskActivity.class);

in.putExtra("adapterStringArray",adapterString.get(position));
in.putExtra("adapterIntArray",adapterInt[position]);
in.putExtra("taskItems",adapterItems.get(position));

startActivity(in);

【讨论】:

  • adapterString 是数组 String[] adapterString = new String[] {"location","object_id","task_subject","task_action","object"};
  • 我得到另一个错误知道...你能帮帮我吗? :)
  • 你在哪里发送任务物品?
  • 它来自这里:in.putExtra("taskItems", adapterItems.get(position)); @NehaAgarwal 我不知道这是否可以帮助我
  • 您正在尝试在第二个活动中获取地图的数组列表,但实际上您发送的只是单个 Hashmap 查看我编辑的答案
【解决方案2】:

像下面这样更改您的 OnItem 点击侦听器,然后它将起作用

 @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String[] adapterString = new String[] {"location","object_id","task_subject","task_action","object"};
        int[] adapterInt = new int[]  {R.id.singleTaskLocation,R.id.singleTaskInvNumber,R.id.singleTaskSubject,R.id.singleTaskAction,R.id.singleTaskObject};

        //neue Oberflaeche starten
        Intent in = new Intent(this,ListSingleTaskActivity.class);
        in.putExtra("adapterStringArray",adapterString.get(position));
        in.putExtra("adapterIntArray",adapterInt[position]);
        in.putExtra("taskItems",adapterItems.get(position));

        startActivity(in);
    }

【讨论】:

    【解决方案3】:

    现在您正在 Intent 中传递完整的数组。

    其实你需要在intent中传递被点击的item的值。 使用此 getItemAtPosition(position) 并将其发送到 in.putExtra 中,然后只有您能够获取所选项目。

    了解更多信息。 http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

    【讨论】:

      【解决方案4】:

      您正在发送整个数组,这就是为什么您在 onclick 中看到整个对象只发送选定的对象,如下所示:

      in.putExtra("adapterStringArray",adapterString.get[position]);
      in.putExtra("adapterIntArray",adapterInt[position]);
      in.putExtra("taskItems",adapterItems.get(position));
      

      第二个崩溃问题试试这个

      HashMap<String, String> hashMap = (HashMap<String, String>)   intent.getSerializableExtra("taskItems");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多