Android(安卓)实现适配器中的子控件与Activity通信
16lz
2021-01-26
有时需要在activity中直接获取listview中每一项(item)的子控件,这个时候我可以使用接口来与activity通信,将子控件作为参数传递过来。代码如下:
ListViewDemoAdapter 适配器代码:
private static final String TAG = ListViewDemoAdapter.class.getSimpleName(); /** * 上下文 */ private Context mContext; /** * LayoutInflater */ private LayoutInflater mInflater; private List datas; public ListViewDemoAdapter(Context context,List list){ this.mContext = context; this.datas = list; this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { return datas.size(); } @Override public String getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if(convertView == null){ holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.listitem,null); holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.tv_name.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG,"setOnClickListener-->onClick..."); //回调传递点击的view mItemOnClickListener.itemOnClickListener(v); } }); return convertView; } private ItemOnClickListener mItemOnClickListener; public void setmItemOnClickListener(ItemOnClickListener listener){ Log.d(TAG,"setmItemOnClickListener..."); this.mItemOnClickListener = listener; } public interface ItemOnClickListener{ /** * 传递点击的view * @param view */ public void itemOnClickListener(View view); } public class ViewHolder{ public TextView tv_name; }
MainActivity 代码:
public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); /** * listview */ private ListView mLvDemo; private List list = new ArrayList(); private ListViewDemoAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化view initView(); //初始化数据 initData(); } /** * 初始化view * @author crystal * @date 2015-9-4 22:24 */ private void initView(){ //初始化listview mLvDemo = (ListView) findViewById(R.id.lv_demo); mAdapter = new ListViewDemoAdapter(MainActivity.this,list); mLvDemo.setAdapter(mAdapter); //获取点击的view子控件 mAdapter.setmItemOnClickListener(new ListViewDemoAdapter.ItemOnClickListener() { /** * 点击的view子控件 * @param view view子控件 */ @Override public void itemOnClickListener(View view) { Log.d(TAG, "itemOnClickListener view..."); TextView tvName = (TextView)view; //提示点击的子控件的文本 Toast.makeText(MainActivity.this,tvName.getText().toString(),Toast.LENGTH_LONG).show(); } }); } /** * 初始化数据 * @author crystal * @date 2015-9-4 22:51 */ private void initData(){ list.add("crystal"); list.add("jack"); list.add("tom"); list.add("rose"); list.add("lora"); list.add("tony"); mAdapter.notifyDataSetChanged(); //更新数据 } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
activity_main.xml :
listitem.xml :
<?xml version="1.0" encoding="utf-8"?>
输出日志:
09-05 10:30:07.412 9088-9088/? D/ListViewDemoAdapter﹕ setmItemOnClickListener...
09-05 10:30:49.687 9088-9088/? D/ListViewDemoAdapter﹕ setOnClickListener-->onClick...
09-05 10:30:49.697 9088-9088/? D/MainActivity﹕ itemOnClickListener view...
更多相关文章
- Android(安卓)AlertDialog的各种用法总结
- 更改Android(安卓)AppCompatRadioButton控件的样式和颜色
- Android(安卓)Studio 开关控件Switch使用
- 理解Android(安卓)Context
- 控件显示和隐藏
- Android(安卓)的 Relative Layout 常量
- 查看Android(安卓)ADT Plugin版本的方法
- Android(安卓)自定义感光器控件SolarProgressView,也可当做普通Pr
- GitHub上优秀Android(安卓)UI Library