2012-09-27 5 views
1

getView가 데이터로 listview의 항목을 설정하는 ArrayAdapter가 있습니다. 내가 listview에서 행을 클릭하면 다른 활동을 시작하고 싶습니다 (내가 할 수있는),하지만 그 활동의 일부를 다른보기에 선물로 보내십시오.arrayAdapter에서 변수를 액세스하는 방법 onItemClick에서 getView

어떻게하면 getView에서 onItemClick 메소드로 데이터에 액세스 할 수 있습니까?

@Override 
     public View getView(int position, View convertView, ViewGroup parent) { 


      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      View rowView = inflater.inflate(R.layout.rotarowlayout, parent, 
        false); 

      TextView startTime = (TextView) rowView 
        .findViewById(R.id.rowstarttime); 
      TextView duration = (TextView) rowView 
        .findViewById(R.id.rowduration); 
      TextView status = (TextView) rowView.findViewById(R.id.rowstatus); 
      TextView name = (TextView) rowView.findViewById(R.id.rowclientname); 
      TextView actualTimeIn = (TextView) rowView.findViewById(R.id.rowactualtimein); 
      TextView actualTimeOut = (TextView) rowView.findViewById(R.id.rowactualtimeout); 

      String record = list.get(position).toString(); 
      String[] itemsInRecord = record.split(","); 
      Log.e(TAG, "itemin record = " + itemsInRecord.length); 
      String[] recordItem = new String[itemsInRecord.length]; 

      for (int x = 0; x < itemsInRecord.length; x++) { 

       recordItem[x] = itemsInRecord[x]; 

      } 

      //set date above listview 

      textViewDate.setText("Rota For " + recordItem[0].substring(1, 11)); 


      String withoutBraket = recordItem[0].substring(11); 
      String withoutSecs = withoutBraket.substring(0, 6); 

      Log.e(TAG, "recordItem = " + recordItem[2]); 

      String _statusString = recordItem[2].toString().trim(); 

      if(_statusString.equalsIgnoreCase("Completed")){ 

       statusField = "c"; 

      }else if(_statusString.equalsIgnoreCase("NCR")){ 

       statusField = "NCR"; 

      }else if(_statusString.equalsIgnoreCase("Waiting")){ 

       statusField = "W"; 
      } 

      Log.e(TAG, "statusField = " + statusField); 

      startTime.setText(withoutSecs+"  "); 
      duration.setText(recordItem[1]+" mins  "); 
      status.setText(statusField); 
      name.setText("  " + recordItem[3] + recordItem[4]); 
      callID = recordItem[5]; 
     // needName = recordItem[6]; 
      actualTimeIn.setText("This call was completed at " + recordItem[6] + " - "); 

      if(! recordItem[7].toString().trim().equalsIgnoreCase( "]")){ 


      String stripBracket = recordItem[7].toString().trim(); 
      Log.e(TAG, "stripBracket = " + stripBracket); 
      String stripBracket2 = stripBracket.substring(0,5); 
      Log.e(TAG, "SB after split = " + stripBracket2); 
      actualTimeOut.setText(stripBracket2); 
      } 

      return rowView; 

     } 

. 당신이 onItemClick()에 어댑터에서 데이터를 얻을 수 있습니다 setTag()getTag() 방법을 사용하여

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 

     Log.e(TAG, "inside onItemClick"); 
Intent i = new Intent(GetRota.this, someOtherActivity.class); 
    i.putsomedata; 
    startActivity(i); 

    } 

답변

3

. 어댑터 클래스에서이

같은 항목에

@Override 
public View getView(int position, View convertView, ViewGroup parent) {   

    rowView.setTag(yourdata_object); 
    return rowView; 
} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    YourDataObject item = (YourDataObject) view.getTag(); 
    Intent i = new Intent(GetRota.this, someOtherActivity.class); 
    i.putsomedata; 
    startActivity(i); 
} 
+0

브릴리언트! 내가 필요한 덕분에. – turtleboy

0

이 시도를 클릭합니다.

클릭 한 항목의 위치는 onItemClick 메서드에서 가져오고 목록에서 클릭 한 뷰를 가져옵니다. 따라서 getView에서 볼 태그를 설정하고 onitemClick에서 해당 뷰 태그를 가져 와서 의도에 전달할 수 있습니다.

rowView.setTag(YOURDATA); // in getView 

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 

     Log.e(TAG, "inside onItemClick"); 
     Intent i = new Intent(GetRota.this, someOtherActivity.class); 
     (yourData) = view.getTag(); // get the tag value and set to putextra 
     i.putsomedata; 
     startActivity(i); 

    } 
관련 문제