Элементы намерения onClick to Activity

У меня есть этот 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");

person Community    schedule 21.05.2015    source источник
comment
Вы отправляете весь список элементов адаптера в новую активность. И в новом действии у вас также есть представление списка. Я бы предложил дополнительно прочитать и понять концепции.   -  person Gaurav Vashisth    schedule 21.05.2015
comment
Вы отправляете полный список, просто отправьте adapter.get(position)   -  person Logic    schedule 21.05.2015
comment
о, это было так просто, спасибо! зачем минусовать?   -  person    schedule 21.05.2015
comment
@raymondis некоторые люди голосуют против, если им просто не нравится что-то в вопросе вместо того, чтобы комментировать, не беспокойтесь об этом, это случается со всеми. Тем не менее, старайтесь, чтобы ваши примеры кода были короткими.   -  person Gilead    schedule 21.05.2015
comment
Хорошо. Спасибо :)   -  person    schedule 21.05.2015
comment
Я отредактировал свой пост. Может кто-то мне помочь, пожалуйста?   -  person    schedule 21.05.2015


Ответы (4)


В 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);
person Neha Agarwal    schedule 21.05.2015
comment
adapterString — массив String[] adapterString = new String[] {location,object_id,task_subject,task_action,object}; - person amodkanthe; 21.05.2015
comment
Я получаю еще одну ошибку... не могли бы вы мне помочь? :) - person ; 21.05.2015
comment
куда вы отправляете эти задачи? - person King of Masses; 21.05.2015
comment
отсюда: in.putExtra(taskItems, adapterItems.get(position)); @NehaAgarwal, я не знаю, может ли это мне помочь - person ; 21.05.2015
comment
вы пытаетесь получить массив карт во втором действии, но на самом деле вы отправляете так же, как одиночный Hashmap, посмотрите на мой отредактированный ответ - person amodkanthe; 21.05.2015

Измените прослушиватель кликов 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);
    }
person King of Masses    schedule 21.05.2015

Прямо сейчас вы передаете полные массивы в намерении.

На самом деле вам нужно передать значение элемента, который был нажат в намерении. Используйте этот getItemAtPosition(position) и отправьте его в in.putExtra, тогда только вы сможете получить выбранный элемент.

Для получения дополнительной информации. http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

person aurilio    schedule 21.05.2015

вы отправляете весь массив, поэтому вы видите, что целые объекты внутри 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");
person amodkanthe    schedule 21.05.2015