1

У меня есть ListActivity для отображения элементов, получаемых из моей ListViewActivity.Намеренные товары onClick to Activity

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"); 
+0

Вы отправляете весь список адаптеров для нового действия. И в новой активности тоже есть список. Я бы предложил продолжить читать и понимать концепции. –

+0

Вы отправляете полный список, просто отправляйте 'adapter.get (position)' –

+0

О, это было так просто, спасибо! почему downvote? –

ответ

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); 
+0

спасибо, что это было так просто !! –

+0

adapterString is arrayy String [] adapterString = new String [] {"location", "object_id", "task_subject", "task_action", "object"}; – apk

+0

Я получаю еще одну ошибку, знаю ... вы можете мне помочь? :) –

0

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

Да, это работает! Большое спасибо!!! –

0

Изменить ваш 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); 
    } 
0

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

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

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

Смежные вопросы