Intent Items onClick 到 Activity
Intent Items onClick to Activity
我有这个列表Activity 用于显示从我的 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)
}
我的问题是我想将信息从点击的项目发送到新的 Activity 并显示它们。上述代码的结果是他向我展示了整个项目。不仅仅是点击的那个。
怎么了?
我希望你清楚我的问题是什么。如果缺少某些内容,请评论
已编辑:
现在我得到这个错误:
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");
您正在发送整个数组,这就是为什么您在 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");
在 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);
像下面这样更改您的 On Item 点击侦听器,它将起作用
@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);
}
现在您正在 Intent 中传递完整的数组。
其实你需要传递intent中被点击的item的值。
使用此 getItemAtPosition(position) 并将其发送到 in.putExtra 中,然后只有您才能获得所选项目。
了解更多信息。 http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
我有这个列表Activity 用于显示从我的 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)
}
我的问题是我想将信息从点击的项目发送到新的 Activity 并显示它们。上述代码的结果是他向我展示了整个项目。不仅仅是点击的那个。 怎么了?
我希望你清楚我的问题是什么。如果缺少某些内容,请评论
已编辑:
现在我得到这个错误:
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");
您正在发送整个数组,这就是为什么您在 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");
在 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);
像下面这样更改您的 On Item 点击侦听器,它将起作用
@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);
}
现在您正在 Intent 中传递完整的数组。
其实你需要传递intent中被点击的item的值。 使用此 getItemAtPosition(position) 并将其发送到 in.putExtra 中,然后只有您才能获得所选项目。
了解更多信息。 http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html