2013-12-20 48 views
2

我想使用settag選定的單選按鈕將其位置存儲在我的BaseAdapter中,並從其他類訪問它。在列表視圖中獲取選定的單選按鈕位置

我可以選擇單個選項,但我需要在選擇單選按鈕時獲取圖像的名稱。

這是我的BaseAdapter GetView:

public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = l_Inflater.inflate(R.layout.item_details_view, null); 
     holder = new ViewHolder(); 
     holder.txt_itemName = (TextView) convertView.findViewById(R.id.name); 
     holder.txt_itemDescription = (TextView) convertView.findViewById(R.id.itemDescription); 
     holder.txt_itemPrice = (TextView) convertView.findViewById(R.id.price); 
     holder.itemImage = (ImageView) convertView.findViewById(R.id.photo); 
     holder.button = (RadioButton)convertView.findViewById(R.id.rbSelectedOption);              

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.txt_itemName.setText(itemDetailsrrayList.get(position).getName()); 
    holder.txt_itemDescription.setText(itemDetailsrrayList.get(position).getItemDescription()); 
    holder.txt_itemPrice.setText(itemDetailsrrayList.get(position).getPrice()); 
    holder.itemImage.setImageResource(imgid[itemDetailsrrayList.get(position).getImageNumber() - 1]); 

    holder.button.setTag(position); 

    holder.button.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
      if((position != mSelectedPosition && mSelectedRB != null)){ 
       mSelectedRB.setChecked(false); 
      } 
      mSelectedPosition = position; 
      mSelectedRB = (RadioButton)v; 
     } 
    }); 

     if(mSelectedPosition != position){ 
      holder.button.setChecked(false); 
     }else{ 
      holder.button.setChecked(true); 
      if(mSelectedRB != null && holder.button!= mSelectedRB){ 
       mSelectedRB = holder.button; 
      } 
     }   
    return convertView; 
} 

這是我ListViewActivity:

ArrayList<ItemDetails> image_details = GetSearchResults(); 

    final ListView lv1 = (ListView) findViewById(R.id.list); 
    lv1.setAdapter(new ItemListBaseAdapter(this, image_details)); 
    lv1.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

    final RadioButton SelectedOption = (RadioButton) findViewById(R.id.rbSelectedOption); 
    lv1.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      int pos = (Integer) v.getTag(); 
      Object o = SelectedOption.getTag(pos); 
      ItemDetails obj_itemDetails = (ItemDetails)o; 
      Toast.makeText(ListViewImagesActivity.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show(); 
      CarName =obj_itemDetails.getName(); 
     } 
    }); 

我無法使用getTag以獲得當前位置:

int pos = (Integer) v.getTag(); 
Object o = SelectedOption.getTag(pos); 

任何人都可以說我如何從BaseAdapter類到ListViewActivity?

回答

1

嘗試這樣:

在適配器中聲明瞭兩個公共字段:

public int SelectedRBPosition; 
public RadioButton SelectedRB; 

檢查時,使用它們來保存位置和單選按鈕。
創建兩個方法來獲取它們;

public int getSelectedRadioButtonPosition(){ 
    return SelectedRBPosition; 
} 

public RadioButton getSelectedRadioButton(){ 
    return SelectedRB; 
} 

在活動宣佈領域adpter:

private ItemListBaseAdapter adapter = new ItemListBaseAdapter(this, image_details); 
final ListView lv1 = (ListView) findViewById(R.id.list); 
lv1.setAdapter(adapter); 
lv1.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

當你需要的時候調用get方法:

int pos = adapter.getSelectedRBPosition(); 
RadioButton rb = adapter.getSelectedRB(); 
+0

真棒答案......它幫助我alot..Thanks: ) –

相關問題