您的位置:首页 > 其它

在适配器中点击监听给activity中的控件赋值,采用接口回调的方式

2017-05-19 10:58 330 查看
我们大家在做项目的时候,时常会遇到在adapter中操作activity中的控件

或者在activity中想操作adapter中的控件这种情况,下面用接口回调来实现此功能。

首先在adapter中定义接口,调用监听方法

private static final String TAG = ListViewDemoAdapter.class.getSimpleName();

/**
* 上下文
*/
private Context mContext;

/**
* LayoutInflater
*/
private LayoutInflater mInflater;

private List<String> datas;

public ListViewDemoAdapter(Context context,List<String> 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
if(mItemOnClickListener!=null){

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;
}


下面是activity中的代码

public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getSimpleName();

/**
* listview
*/
private ListView mLvDemo;

private List<String> list = new ArrayList<String>();

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(); //更新数据
}
}


这样就实现了在activity中调用adapter控件监听的方法,实现adapter与activity之间的通信。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐