2011-10-12 93 views
4

我有一個場景,我們應該在listview中有一個單選模式單選按鈕。當我點擊單選按鈕時,它應該啓用狀態。當我點擊整個項目時,它應該重定向到新的活動。我refered以下鏈接Android - 單選按鈕在listView?

link1link2

我可以找出多種選擇模式的方式。但不適用於單一選擇模式。對此有何想法?

???編輯??? 我如何才能在列表視圖中找到物品的相應標籤的標籤

回答

4

您可以採用一種方法,但我不知道它是否完美。

跟蹤當您點擊另一個單選按鈕時,現在檢查單選按鈕的列表視圖的位置ID,然後執行setOnCheckedChangeListener(listener)並檢查已檢查位置,並取消選中該單選按鈕。

您可以存儲單選按鈕的狀態進入自定義模型(模型包含了像TextView的,ImageView的,單選按鈕等的列表視圖單行的控件),將其添加到列表視圖

檢查this文章使用模型和處理組件爲特定的複選框的例子在此列表視圖

更新

我認爲你可以獲取標記像這樣

((View)((ViewGroup)listview.getItemAtPosition(0)).getTag()).getTag(); 
or 
((Button)l.getItemAtPosition(0)).getTag(); 

更新2

想這是你的適配器和ArrayList對象

private List<Model> list_model = new ArrayList<Model>(); 

private ArrayAdapter<Model> modelAdapter; 

你Model類這個樣子的

private class Model{ 
    private String text1 = ""; 
    private boolean isChecked = false; 

    public Model(String text1){ 
     this.text1 = text1; 
     isChecked = false; 
    } 
} 

您viewholder

private static class ViewHolder{ 
    TextView textView; 
     RadioButton radioBtn; 
} 

現在通過的ListModel這個CustomAdapter類的構造函數

private List<Model> list; 
private Context context; 

public CustomAdapter(Context context, List<Model> list){ 
    super(context,R.layout.list_layout,list); 
    this.list = list; 
    this.context = context; 
} 

getView()

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = null; 

    if(convertView == null){ 
     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.gcalendar_list_layout, null); 
     final ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.textView = (TextView) view.findViewById(R.id.text1); 
     viewHolder.radioBtn = (RadioButton) view.findViewById(R.id.radioBtn); 
     viewHolder.radioBtn.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       Model element = (Model) viewHolder.checkBox.getTag(); 
       element.isChecked = buttonView.isChecked(); 
       boolean isChecked = true; 
       for(int i=0;i<list.size();i++){ 
        if(!list.get(i).isChecked){ 
         list.get(i).isChecked=false; // more implement here or may be this work 
         break; 
        } 
       } 
      } 
     }); 
     view.setTag(viewHolder); 
     viewHolder.radioBtn.setTag(list.get(position)); 
    }else{ 
     view = convertView; 
     ((ViewHolder)view.getTag()).radioBtn.setTag(list.get(position)); 
    } 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.textView.setText(list.get(position).name); 
    holder.radioBtn.setChecked(list.get(position).isChecked); 
    return view; 
} 
+0

+1。請在你的代碼中提倡。我無法正確地得到你。 – Praveen

+0

檢查更新回答後 – Pratik

+0

但它不工作。它不禁用處於選定狀態的前一個單選按鈕。 – Praveen

0

當只有一個選擇按鈕,窗口小部件複選框。你必須在你的列表適配器中做一些調整 - 你需要在配置列表項視圖的時候註冊自定義事件監聽器 ,並且要記住這些視圖被重用 (或者如果你不關心創建新的視圖性能)

+0

好的。那麼我可以自定義複選框圖像。我必須改變複選框的主題。 – Praveen