2014-11-12 2 views
0

Используя следующий код, когда выбран элемент из списка, он обновляет таблицу данных. Проблема заключается в том, что есть несколько элементов, независимо от того, какой из них выбран, он всегда обновляет первый указанный элемент, а не тот, который выбран. Заранее спасибо!OnItemClick не работает должным образом в listview

Отредактировано-обновлено. Incorporated (позиция) и попытался упростить код. Все еще не будет захвачен выбранный элемент, всегда возвращает верхний элемент, отображаемый в списке, независимо. Контроллер DB работает отлично, все остальное хорошо, кроме этого ...

setContentView(R.layout.list_messages); 

    ArrayList<HashMap<String, String>> phraseList = controller 
      .getUnreadMessage(); 

     ListView lv = getListView(); 

     ListAdapter adapter = new SimpleAdapter(
       ReadUnReadMessages.this, 
       phraseList, 
       R.layout.view_list_messages, 
       new String[] { "mFromName", "mToAddress", "mBody", 
         "mToName", "messageTime", "mFromAddress", "mRead", 
         "messageId" }, 
       new int[] { R.id.messageFrom, R.id.messageToAdd, 
         R.id.messageBody, R.id.messageTo, R.id.messageTime, 
         R.id.messageFromAdd, R.id.readCode, R.id.messageId }); 
     setListAdapter(adapter); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long arg) { 
       @SuppressWarnings("unchecked") 
       HashMap<String, String> queryValues = (HashMap<String, String>)parent.getItemAtPosition(position); 
       messageBody = (TextView) findViewById(R.id.messageBody); 
       readCode = (TextView) findViewById(R.id.readCode); 
       messageId = (TextView) findViewById(R.id.messageId); 

       String readCode = "1"; 
       queryValues 
         .put("messageId", messageId.getText().toString()); 
       queryValues.put("mRead", readCode); 
       queryValues.put("mBody", messageBody.getText().toString()); 

       controller.markMessage(queryValues); 

       this.callSplash(view); 
      } 


      public void callSplash(View view) { 

       Intent objSplash = new Intent(getApplicationContext(), 
         Splash.class); 
       startActivity(objSplash); 
      } 
     }); 
+1

Мы не экстрасенсы, что такое 'insertData()' и 'callSplash (view)'? – Simas

+1

Я собираюсь идти вперед и сообщать вам, что вы отвечаете, как-то включаете вашу позицию в insertData. На данный момент вы не используете свою позицию в onItemClick, которая является единственным способом отличия элементов. – zgc7009

+0

Вы писали SimpleListAdapter? – Darpan

ответ

0

Трудно точно сказать, как вы ожидали его на работу, но это, кажется, как ваш центральной проблемой является то, что вы не обращая внимания на " position "в onItemClick. Это способ Android сообщить вам, какой элемент был нажат. Как-то вам нужно передать этот параметр, или же соответствующий объект элемента, который вы запрашиваете первый из адаптера, к функциям, которые звонят из onItemClick:

this.insertData(position); 

В противном случае эти функции должны угадать, какой элемент был щелкнул. И, видимо, это то, что они делают: они предполагают, что первый элемент был нажат.