2014-11-12 3 views
0

다음 코드를 사용하면 목록의 항목을 선택하면 데이터 표가 업데이트됩니다. 문제는 여러 항목이 나열되어있는 경우에 관계없이 선택한 항목이 아닌 첫 번째 나열된 항목을 항상 업데이트합니다. 미리 감사드립니다!목록보기에서 OnItemClick이 제대로 작동하지 않습니다.

편집 됨 - 업데이트 됨. 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

우리는 psychics가 아니며,'insertData()'와'callSplash (view)'는 무엇입니까? – Simas

+1

저는 앞으로 가서 insertData에 자신의 위치를 ​​어떻게 든 포함시키는 것에 대한 대답을 알려 드리겠습니다. 이 시점에서 아이템을 구별 할 수있는 유일한 방법 인 onItemClick에서 자신의 직위를 사용하지 않습니다. – zgc7009

+0

SimpleListAdapter를 작성 했습니까? – Darpan

답변

0

당신이 일을 기대하고 있었다 정확히 말해 어렵다 ... 다른 모든이를 제외하고 좋은, 잘 작동하지만 중앙 문제처럼 보인다하면 '는 무시된다는 것입니다 position '매개 변수를 onItemClick에 추가합니다. 이것은 Android가 클릭 한 항목을 알려주는 방식입니다. 어떻게 든 당신은 당신이 onItemClick에서 호출하는 기능에, 당신은 어댑터에서 첫 가져올 해당 매개 변수, 또는 다른 해당 항목 객체를 전달해야

this.insertData(position); 

그렇지 않으면 그 기능이 클릭 ​​된 항목을 생각해야합니다. 그리고 분명히 그것이 그들이하는 일입니다. 그들은 첫 번째 항목이 클릭되었다고 가정합니다.