本地数据下,radiobutton和图片组合,利用adapter+listview进行单选

时间:2023-03-09 06:00:43
本地数据下,radiobutton和图片组合,利用adapter+listview进行单选

浮生偷得半日闲,等接口定义的过程中,重新复习下adapter+listview实现单选的方法

主界面

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.locallistviewradiobutton.MainActivity" > <ListView
android:id="@+id/lv_radiobutton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"> </ListView> </RelativeLayout>

activity_listview.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" > <LinearLayout
android:id="@+id/ll_rg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#C6C6C6"> <RadioButton
android:id="@+id/rb_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:focusable="false"/> <TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="name"
android:textSize="20sp"/> <ImageView
android:id="@+id/iv_card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerInside"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:layout_gravity="left"
android:adjustViewBounds="true"
android:src="@drawable/ic_launcher" /> </LinearLayout> <View
android:layout_width="fill_parent"
android:layout_height="10dp"
android:background="#ffffff" /> </LinearLayout>

MainActivity.java

 package com.example.locallistviewradiobutton;

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener; public class MainActivity extends Activity {
private ListView lv_radiobutton;
private RBlistAdapter adapter;
private String[] names = new String[] { "a","b","c","d","e" }; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); lv_radiobutton = (ListView) findViewById(R.id.lv_radiobutton);
adapter = new RBlistAdapter(this, names);
lv_radiobutton.setAdapter(adapter); //点击一行任意位置都能保证radiobutton选中
lv_radiobutton.setOnItemClickListener(new myOnItemClickListener()); } private class myOnItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
adapter.index = position;//获取位置并传给adapter中的index(public变量)
adapter.notifyDataSetChanged();
}
}
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
} }

RBlistAdapter.java

 package com.example.locallistviewradiobutton;

 import android.widget.BaseAdapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast; public class RBlistAdapter extends BaseAdapter{
private LayoutInflater inflater;
private String[] picspecies;
private viewHolder holder;
// 标记用户当前选择的那一个,默认为第一个:(0)
public int index = 0;
private Context c; public RBlistAdapter(Context c, String[] picspecies) {
super();
this.c = c;
this.picspecies = picspecies;
inflater = LayoutInflater.from(c);
} @Override
public int getCount() {
return picspecies.length;
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
return 0;
} @SuppressLint("InflateParams") @Override
public View getView(final int position, View convertView, ViewGroup parent) { holder = new viewHolder();
if (convertView == null) {
convertView = inflater.inflate(R.layout.activity_listview, null);
holder.nameTxt = (TextView) convertView.findViewById(R.id.tv_name);
holder.selectBtn = (RadioButton) convertView.findViewById(R.id.rb_select);
convertView.setTag(holder);
} else {
holder = (viewHolder) convertView.getTag();
} holder.nameTxt.setText(picspecies[position]);
holder.selectBtn
.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
Toast.makeText(c, "您选择的是:" + picspecies[position],
Toast.LENGTH_SHORT).show();
index = position;
notifyDataSetChanged();
}
}
}); if (index == position) {// 选中的条目和当前的条目是否相等
holder.selectBtn.setChecked(true);
} else {
holder.selectBtn.setChecked(false);
}
return convertView;
} public class viewHolder {
public TextView nameTxt;
public RadioButton selectBtn;
} }

代码下载