2012-09-27 19 views
1

我有一個ArrayAdapter,它的getView用數據設置列表視圖中的項目。當我在列表視圖中單擊一行時,我想開始另一個活動(我可以這樣做),但將該活動的一些數據發送到另一個視圖中。如何訪問arrayAdapter中的變量getView onItemClick

我該如何在onItemClick方法中通過getView訪問數據?

@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; 

     } 

@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

使用setTag()getTag()方法,您可以在onItemClick()得到適配器的數據。像適配器類此

@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中獲得該視圖標記並傳遞給intent。

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

    }