Man*_*gde 19 android radio-button android-layout android-listview android-adapter
我正在开发一个应用程序,我需要在列表视图中实现单选按钮.我想实现一个列表视图,每行有一个单选按钮和两个文本视图.列表视图下方有一个"确定"按钮.
我所做的是创建了一个列表视图和一个自定义适配器.listview的代码如下:
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:overScrollMode="never"
tools:ignore="NestedScrolling"
android:choiceMode="singleChoice" >
</ListView>
Run Code Online (Sandbox Code Playgroud)
我创建了一个自定义适配器布局:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
tools:ignore="UselessParent" >
<RadioButton
android:id="@+id/radiobutton"
android:layout_width="0sp"
android:layout_height="wrap_content"
android:layout_weight=".1" />
<TextView
android:id="@+id/textview1"
android:layout_width="0sp"
android:layout_height="wrap_content"
android:layout_weight=".3" />
<TextView
android:id="@+id/textview2"
android:layout_width="0sp"
android:layout_height="wrap_content"
android:layout_weight=".3" />
</TableRow>
</TableLayout>
Run Code Online (Sandbox Code Playgroud)
片段的java代码如下:
ListView listView = (ListView) view.findViewById(R.id.listview);
// values is a StringArray holding some string values.
CustomAdapter customAdapter = new CustomAdapter (getActivity(), values);
listView.setAdapter(customAdapter );
listView.setOnItemClickListener(this);
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {}
Run Code Online (Sandbox Code Playgroud)
适配器的代码如下:
public class CustomAdapter extends ArrayAdapter<String> {
/** Global declaration of variables. As there scope lies in whole class. */
private Context context;
private String[] listOfValues;
/** Constructor Class */
public CustomAdapter (Context c,String[] values) {
super(c,R.layout.adapter_layout,values);
this.context = c;
this.listOfValues = values;
}
/** Implement getView method for customizing row of list view. */
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
// Creating a view of row.
View rowView = inflater.inflate(R.layout.adapter_layout, parent, false);
TextView textView1 = (TextView)rowView.findViewById(R.id.textview1);
TextView textView2 = (TextView)rowView.findViewById(R.id.textview2);
RadioButton radioButton = (RadioButton) rowView.findViewById(R.id.radiobutton);
radioButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, CustomAdapter[position], Toast.LENGTH_SHORT).show();
}
});
return rowView;
}
}
Run Code Online (Sandbox Code Playgroud)
textview1的数据填充在SQLite数据库中,而textview2上的数据是"状态关闭".在选择或单击任何单选按钮时,文本视图的文本将更改为"状态打开".
问题是:应用程序的需要是只有一个单选按钮应该被选中,textview2的数据会在选择时发生变化.当用户点击另一个单选按钮时,它将被选中,前一个应该取消选择,textview2的文本将更改为先前选择的单选按钮的"状态已关闭",并单击单选按钮以"状态打开".
编辑1:
并点击"确定"按钮我想得到列表视图textview1和textview2的位置,文本,因为我想在deview中的SQLite数据库中保存该文本.
请指导我应该遵循哪些步骤.我正处于申请中间.您需要提供宝贵的指导.
Bri*_*ell 71
以下是关键想法
RadioButton检查a时,我们必须调用notifyDataSetChanged(),以便更新所有视图.RadioButton被选中,我们必须设置selectedPosition,以跟踪哪些RadioButton选择Views在里面回收ListView.因此,他们的绝对位置发生了变化ListView.因此,在里面ListAdapter#getView(),我们必须呼吁setTag()每一个RadioButton.这允许我们RadioButton在RadioButton单击时确定列表中的当前位置.RadioButton#setChecked()必须在内部更新getView()新的或预先存在的Views.下面是我编写和测试的ArrayAdapter示例,以演示这些想法
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// I do no use these values anywhere inside the ArrayAdapter. I could, but don't.
final Integer[] values = new Integer[] {1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,};
ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(this, R.layout.row, R.id.textview, values) {
int selectedPosition = 0;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
RadioButton r = (RadioButton)v.findViewById(R.id.radiobutton);
}
TextView tv = (TextView)v.findViewById(R.id.textview);
tv.setText("Text view #" + position);
RadioButton r = (RadioButton)v.findViewById(R.id.radiobutton);
r.setChecked(position == selectedPosition);
r.setTag(position);
r.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectedPosition = (Integer)view.getTag();
notifyDataSetChanged();
}
});
return v;
}
};
setListAdapter(adapter);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60838 次 |
| 最近记录: |