2015-10-19 51 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]

相关问题