2015-10-19 52 views
4

我想實現一個自定義視圖,如下面的截圖單選按鈕。RadioButton與自定義視圖Android

RadioGroup with custom View

的單選按鈕的計數將是動態的。我試圖創建一個Radiogroup並使用addView以編程方式將RadioButton添加到RadioGroup。但是不可能像setText那樣在附加的屏幕截圖中顯示。所以我打算增加一個LinearLayout,當OnClickLinearLayout我會啓用RadioButton附加到LinearLayout並禁用其餘的。無論是這樣做的正確方法,還是有其他方法來實現這一點。

我也搜了很多。但我無法找到類似的東西。所以,請任何人都建議我正確的方式。

+1

您可以使用自定義的ListView。 –

+1

@ FrankN.Stein謝謝你的建議。在dhinakaran-thennarasu下面發佈了一個答案。我遵循並實施了這一點。 –

回答

6

您可以使用自定義列表查看。

activity_list_view.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:id="@+id/radioGroup" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true"/> 
</RelativeLayout> 

自定義列表項:radio_button_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/radioButtonLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:orientation="horizontal" 
    android:descendantFocusability="blocksDescendants" 
    android:layout_margin="10dp"> 

    <RadioButton 
     android:id="@+id/radioButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:checked="false" 
     android:text="" /> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_weight="0.9" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_marginLeft="10dp"> 

     <TextView 
      android:id="@+id/textCode" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Code XYZ" /> 

     <TextView 
      android:id="@+id/textCond" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="2dp" 
      android:text="Rs.100 off if you purchase more than.." /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/textValid" 
     android:layout_weight="0.2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="right" 
     android:text="Valid until dd/mm/yyyy" /> 
</LinearLayout> 

現在使用自定義的適配器可以活動添加內容:

public class RadioButtonActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list_view); 

     //  RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup); 
     final List<ItemContents> saveItems = new ArrayList<>(); 

     String code = null, condition = null, valid = null; 

     // save your values here to the ItemContent List. usign dummy values as of now 
     for (int i = 1; i < 6; i++) { 
      code = "CodeXYZ000" + i; 
      condition = "Purchase More than Rs." + i + "00"; 
      valid = "Valid until Dec 30"; 
      saveItems.add(itemContents(i, code, condition, valid)); 
     } 
     final CustomAdapter adapter = new CustomAdapter(this, R.layout.activity_list_view, saveItems); 
     ListView listView = (ListView) findViewById(R.id.radioGroup); 
     listView.setAdapter(adapter); 
     listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       adapter.setSelectedIndex(position); // set selected position and notify the adapter 
       adapter.notifyDataSetChanged(); 
      } 
     }); 
    } 

    private static ItemContents itemContents(int i, final String code, final String condition, final String valid) { 

     ItemContents itemContent = new ItemContents(); 
     itemContent.setId(i); 
     itemContent.setmCode(code); 
     itemContent.setmCondition(condition); 
     itemContent.setmValid(valid); 
     return itemContent; 

    } 
} 

而自定義適配器:

public class CustomAdapter extends ArrayAdapter<ItemContents> { 
    int selectedIndex = -1; 

    public CustomAdapter(Context context, int activity_radio_button, List<ItemContents> saveItems) { 
     super(context, activity_radio_button, saveItems); 
    } 

    public void setSelectedIndex(int index) { 
     selectedIndex = index; 
    } 

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

     View v = convertView; 

     if (v == null) { 
      LayoutInflater vi; 
      vi = LayoutInflater.from(getContext()); 
      v = vi.inflate(R.layout.radio_button_item, null); 
     } 

     RadioButton rbSelect = (RadioButton) v 
       .findViewById(R.id.radioButton); 
     if(selectedIndex == position){ // check the position to update correct radio button. 
      rbSelect.setChecked(true); 
     } 
     else{ 
      rbSelect.setChecked(false); 
     } 

     ItemContents itemContents = getItem(position); 

     if (itemContents != null) { 
      TextView textCode = (TextView) v.findViewById(R.id.textCode); 
      TextView textCond = (TextView) v.findViewById(R.id.textCond); 
      TextView textValid = (TextView) v.findViewById(R.id.textValid); 


      textCode.setText(itemContents.getmCode()); 
      textCond.setText(itemContents.getmCondition()); 
      textValid.setText(itemContents.getmValid()); 
     } 

     return v; 
    } 
} 

和你的輸出(我曾在電視上看到這樣的大屏幕)

[Output[1]

相關問題