Android适配器总结
16lz
2021-01-26
1、ArrayAdapter
实现代码;
public class MainActivity extends Activity {private ListView listAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView(){listAdapter = (ListView) findViewById(R.id.list_adapter);ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.list ,new String[]{"音乐","电影","足球"});listAdapter.setAdapter(adapter);}}在xml文件中方textView 用来显示数组的内容
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" />运行效果
需要注意的是当自己写一个list.xml文件来存放数组中的内容时TextView应为最外层控件(即TextView不能放在任何Layout控件里面)否则报错you must support a resource ID for a TextView 报错如下:
下
当然你也可以不写含(用来显示)TextView的.xml文件只要将
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.list ,new String[]{"音乐","电影","足球"});改成
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),<span style="white-space:pre"></span>android.R.layout.simple_list_item_1,new String[]{"音乐","电影","足球"});
</pre><pre name="code" class="java">使用Android自导的组件即可
2、SimpleAdapter
首先在主界面放一个listview组件.xml
<ListView android:id="@+id/list_adapter" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView>在准备一个xml文件设计界面的格式.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/role" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/team" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>将适配器与xml结合起来
public class SimpleAdapterActivity extends Activity {private ListView listView ;private String [] keys = new String []{"name","role","team"};private int [] IDs = new int[]{R.id.name,R.id.role,R.id.team};private List<HashMap<String, String>>list;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);initView();}private void initView(){listView = (ListView)findViewById(R.id.list_adapter);list = new ArrayList<HashMap<String,String>>();HashMap<String, String> map = new HashMap<String, String>();map.put("name", "小罗");map.put("role", "足球");map.put("team", "巴萨罗那");list.add(map);HashMap<String, String> map2 = new HashMap<String, String>();map2.put("name", "乔丹");map2.put("role", "篮球");map2.put("team", "公牛");list.add(map2);SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(), list, R.layout.list, keys, IDs);listView.setAdapter(adapter);}}运行效果 界面貌似太难看了,另外GraidView也可以使用SimpleAdapter达到九宫格的效果
3、通过继承适配器类自定义适配器
其实原理都一样,就像ExpandableListView组件在运用的使用其需要自定义适配器 具体参考:
http://blog.csdn.net/wenzhenyu1990/article/details/14434407
自定义适配器常见的一种extends BaseAdapter 的 比如一个listView 点击item时惊醒修改,点击按钮时实现删除,这时需要自定义一个extends BaseAdapter的适配器这样的,并且将listView 的descendantFocusability设置为blocksDescendants 同事将Button的focusable设置为false。 具体代码有时间补上。
基于BaseAdapter 自定义的Adapter
class UsersShowAdapter extends BaseAdapter{private ViewHolder holder = new ViewHolder();private List<HashMap<String, String>> datas;private Context context;private LayoutInflater inflater;public UsersShowAdapter(Context context,List<HashMap<String, String>> datas) {this.context = context;inflater = LayoutInflater.from(context);this.datas = datas;}@Overridepublic int getCount() {return datas.size();}@Overridepublic Object getItem(int position) {return datas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup group) {if(convertView==null){convertView = inflater.inflate(R.layout.app_list_item, null);holder.accountView = (TextView) convertView.findViewById(R.id.item_account);holder.genderView = (TextView)convertView.findViewById(R.id.item_gender);holder.del = (Button)convertView.findViewById(R.id.item_del);holder.del.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(getApplicationContext(), "del", Toast.LENGTH_LONG).show();}});holder.update=(Button)convertView.findViewById(R.id.item_update);holder.update.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(getApplicationContext(), "update", Toast.LENGTH_LONG).show();}});convertView.setTag(holder);}else {holder = (ViewHolder) convertView.getTag();}holder.accountView.setText(datas.get(position).get(Data.ACCOUNT));holder.genderView.setText(datas.get(position).get(Data.GENDER));holder.del.setText("del");holder.update.setText("update");return convertView;}}
更多相关文章
- Android:使用webview上传文件(支持相册和拍照) .
- Android/读取指定类型的文件
- android app 内部文件路径
- android重复的文件复制APK META-INF许可证错误记录
- Android(安卓)-- ListView(SimpleAdapter) 自定义适配器
- Android(安卓)Studio项目目录结构
- 为华为荣耀5c(nem-tlooh)编译最新twrp recovery
- Android注册表文件
- 编译应用时的Android.mk文件