android 接口回调用法

来源:互联网 发布:java sdk安装 编辑:程序博客网 时间:2024/05/18 00:24

恐惧会让你失败!作为最帅的猴子,我只想说:“一次不行就再试一次,没有不成功的,只有不争气追求答案的你!”

可以说接口回调折腾了我很长一段时间,不懂原理确实很头疼。

这里我写了个小demo(最简单的方式和写法,希望能帮助大家):

实现:在ListView的Item上点击增加按钮通知Activity设置TextView属性

在适配器调用接口抽象方法并传参,activity实例化接口即可接受值

1、在activity_main.xml中:

<ListView    android:id="@+id/lv_call_back"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_above="@+id/tv_num"/><TextView    android:id="@+id/tv_num"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_centerHorizontal="true"    android:layout_alignParentBottom="true"    android:text="1"    android:textSize="40dp"    android:textColor="#fc0519"/>
2、ListView的适配器MyAdapter:

public class MyAdapter extends BaseAdapter {    private List<String> strList;    private Context context;    private LayoutInflater inflater;    /**监听接口*/    public interface OnItemClickListener {        void onItemClick(int position);    }    private OnItemClickListener onItemClickListener;    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {        this.onItemClickListener = onItemClickListener;    }    public MyAdapter(Context context, List<String> strList) {        this.context = context;        this.strList = strList;        inflater = LayoutInflater.from(context);    }    @Override    public int getCount() {        return strList.size();    }    @Override    public Object getItem(int position) {        return strList.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder;        if(convertView == null) {            convertView = inflater.inflate(R.layout.item_add_num, null);            viewHolder = new ViewHolder(convertView);            viewHolder.tvName.setText(strList.get(position));            convertView.setTag(viewHolder);        }else{            viewHolder= (ViewHolder) convertView.getTag();        }        if(onItemClickListener != null) {            viewHolder.btnAdd.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    /**这里用接口调用方法然后传入值*/                    onItemClickListener.onItemClick(position);                }            });        }        return convertView;    }    class ViewHolder {        TextView tvName;        Button btnAdd;        public ViewHolder(View view) {            tvName = (TextView) view.findViewById(R.id.tv_name);            btnAdd = (Button) view.findViewById(R.id.btn_add_num);        }    }}
3、在MainActivity.java中:

public class MainActivity extends Activity {    private ListView lvCallBack;    private TextView tvNum;    private List<String> strList;    private MyAdapter myAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initWidget();        initData();    }    private void initWidget() {        lvCallBack = (ListView) findViewById(R.id.lv_call_back);        tvNum = (TextView) findViewById(R.id.tv_num);    }    private void initData() {        strList = new ArrayList<>();        for(int i=0; i<10; i++) {            strList.add(i+ "枚金牌");        }        myAdapter = new MyAdapter(this, strList);        lvCallBack.setAdapter(myAdapter);        myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {            @Override            public void onItemClick(int position) {                tvNum.setText("今天增加了" + position + "枚金牌");            }        });    }}

0 0