如何使用只能一次选择一个的单选按钮替换listview中的复选框。任何的想法 ?以下是我的工作代码
MainActivity.java
public class MainActivity extends ExpandableListActivity
{
private static final String LOG_TAG = "ElistCBox2";
private ColorAdapter expListAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
ArrayList<String> groupNames = new ArrayList<String>();
groupNames.add( "grey" );
groupNames.add( "blue" );
groupNames.add( "yellow" );
groupNames.add( "red" );
ArrayList<ArrayList<Color>> colors = new ArrayList<ArrayList<Color>>();
ArrayList<Color> color = new ArrayList<Color>();
color.add( new Color( "lightgrey","#D3D3D3", false ) );
color.add( new Color( "dimgray","#696969", true ) );
color.add( new Color( "sgi gray 92","#EAEAEA", false ) );
colors.add( color );
color = new ArrayList<Color>();
color.add( new Color( "dodgerblue 2","#1C86EE",false ) );
color.add( new Color( "steelblue 2","#5CACEE",false ) );
color.add( new Color( "powderblue","#B0E0E6", true ) );
colors.add( color );
color = new ArrayList<Color>();
color.add( new Color( "yellow 1","#FFFF00",true ) );
color.add( new Color( "gold 1","#FFD700",false ) );
color.add( new Color( "darkgoldenrod 1","#FFB90F", true ) );
colors.add( color );
color = new ArrayList<Color>();
color.add( new Color( "indianred 1","#FF6A6A",true ) );
color.add( new Color( "firebrick 1","#FF3030",false ) );
color.add( new Color( "maroon","#800000", false ) );
colors.add( color );
expListAdapter = new ColorAdapter( this,groupNames, colors );
setListAdapter( expListAdapter );
}
public void onContentChanged () {
super.onContentChanged();
Log.d( LOG_TAG, "onContentChanged" );
}
public boolean onChildClick(
ExpandableListView parent,
View v,
int groupPosition,
int childPosition,
long id) {
Log.d( LOG_TAG, "onChildClick: "+childPosition );
CheckBox cb = (CheckBox)v.findViewById( R.id.check1 );
if( cb != null )
cb.toggle();
return false;
}
}
Color.java
public class Color {
public String color = null;
public String rgb = null;
public boolean state = false;
public Color( String color, String rgb, boolean state ) {
this.color = color;
this.rgb = rgb;
this.state = state;
}
public String getColor() {
return color;
}
public String getRgb() {
return rgb;
}
public boolean getState() {
return state;
}
}
ColorAdapter.java
public class ColorAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<String> groups;
private ArrayList<ArrayList<Color>> colors;
private LayoutInflater inflater;
public ColorAdapter(Context context,
ArrayList<String> groups,
ArrayList<ArrayList<Color>> colors ) {
this.context = context;
this.groups = groups;
this.colors = colors;
inflater = LayoutInflater.from( context );
}
public Object getChild(int groupPosition, int childPosition) {
return colors.get( groupPosition ).get( childPosition );
}
public long getChildId(int groupPosition, int childPosition) {
return (long)( groupPosition*1024+childPosition ); // Max 1024 children per group
}
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
View v = null;
if( convertView != null )
v = convertView;
else
v = inflater.inflate(R.layout.child_row, parent, false);
Color c = (Color)getChild( groupPosition, childPosition );
TextView color = (TextView)v.findViewById( R.id.childname );
if( color != null )
color.setText( c.getColor() );
TextView rgb = (TextView)v.findViewById( R.id.rgb );
if( rgb != null )
rgb.setText( c.getRgb() );
CheckBox cb = (CheckBox)v.findViewById( R.id.check1 );
cb.setChecked( c.getState() );
return v;
}
public int getChildrenCount(int groupPosition) {
return colors.get( groupPosition ).size();
}
public Object getGroup(int groupPosition) {
return groups.get( groupPosition );
}
public int getGroupCount() {
return groups.size();
}
public long getGroupId(int groupPosition) {
return (long)( groupPosition*1024 ); // To be consistent with getChildId
}
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View v = null;
if( convertView != null )
v = convertView;
else
v = inflater.inflate(R.layout.group_row, parent, false);
String gt = (String)getGroup( groupPosition );
TextView colorGroup = (TextView)v.findViewById( R.id.childname );
if( gt != null )
colorGroup.setText( gt );
return v;
}
public boolean hasStableIds() {
return true;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public void onGroupCollapsed (int groupPosition) {}
public void onGroupExpanded(int groupPosition) {}
}
child_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/childname"
android:paddingLeft="50px"
android:focusable="false"
android:textSize="14px"
android:textStyle="italic"
android:layout_width="150px"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/rgb"
android:focusable="false"
android:textSize="14px"
android:textStyle="italic"
android:layout_width="100px"
android:layout_height="wrap_content"/>
<CheckBox android:id="@+id/check1"
android:focusable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
group_row.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/childname"
android:paddingLeft="50px"
android:textSize="14px"
android:textStyle="italic"
android:layout_width="150px"
android:layout_height="wrap_content"/>
</LinearLayout>
main.xml中
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ExpandableListView android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<TextView android:id="@+id/android:empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/main_no_items"/>
</LinearLayout>
答案 0 :(得分:0)
在子行xml文件中用以下替换复选框标记:
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton android:id="@+id/radio_pirates"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pirates"
android:onClick="onRadioButtonClicked"/>
<RadioButton android:id="@+id/radio_ninjas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ninjas"
android:onClick="onRadioButtonClicked"/>
</RadioGroup>
并在活动中覆盖此方法
public void onRadioButtonClicked(View view) {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
switch(view.getId()) {
case R.id.radio_pirates:
if (checked)
// Pirates are the best
break;
case R.id.radio_ninjas:
if (checked)
// Ninjas rule
break;
}
}
答案 1 :(得分:0)
下面是我的代码。请求使用radiogroup,然后动态添加radiobutton。这样,一次只能选择一个。
for (int row = 0; row < 1; row++) {
LinearLayout l1 = new LinearLayout(this);
l1.setOrientation(LinearLayout.HORIZONTAL);
for (int i = 1; i <= number; i++) {
RadioButton rb= new RadioButton(this);
rb.setId((row * 2) + i);
rb.setText("Radio " + rdbtn.getId());
l1.addView(rdbtn);
}
((ViewGroup) findViewById(R.id.radiogroup)).addView(l1);
答案 2 :(得分:0)
在您的child_expense_amount.xml中,使用RadioButton
而不是CheckBox
。
由于您将使用单选按钮,因此您需要手动(以编程方式)将其设置为开/关,因为无线电组支持单选。
要手动打开/关闭(切换选择),请在切换选择的位置使用onClick
或onSelected
等听众。