观察者模式(设置回调接口)

来源:互联网 发布:折弯机编程视频 编辑:程序博客网 时间:2024/05/16 09:22

知识点:

关键字interface的使用

观察者模式思想


运行效果:



代码:


public class MainActivity extends Activity {    private ListView mListView;    private MyAdapter mAdapter;    private List<String> mList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mListView= (ListView) findViewById(R.id.mListView);        mList=new ArrayList<>();        mAdapter=new MyAdapter(mList,this);        for (int i = 0; i <8 ; i++) {            mList.add("我是第"+i+"个Button");        }        mListView.setAdapter(mAdapter);        mAdapter.MyOnClickListener(new MyAdapter.MyButtonClickListener() {            @Override            public void Listener(View mView, int i) {                Toast.makeText(MainActivity.this,"你点击了第"+i+"个Button",Toast.LENGTH_SHORT).show();            }        });    }}

public class MyAdapter extends BaseAdapter {    private Context mContext;    private List<String> mList;    private MyButtonClickListener mListener;    public MyAdapter( List<String> pList,Context pContext) {        mContext=pContext;        mList=pList;    }    @Override    public int getCount() {      return  mList.size();    }    @Override    public Object getItem(int i) {        return mList.get(i);    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        ViewHolder mHolder;        final int flag=i;        if(view==null){            mHolder=new ViewHolder();            view= LayoutInflater.from(mContext).inflate(R.layout.listview_item,null);            mHolder.button= (Button) view.findViewById(R.id.btButton);            view.setTag(mHolder);        }else {            mHolder= (ViewHolder) view.getTag();        }        mHolder.button.setText(mList.get(i));        mHolder.button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mListener.Listener(view,flag);            }        });        return view;    }    private class ViewHolder{        Button button;    }    interface  MyButtonClickListener{        void Listener(View mView,int i);    }    public   void MyOnClickListener(MyButtonClickListener Listener){        mListener=Listener;    }}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <ListView        android:id="@+id/mListView"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_marginBottom="6dp"        android:layout_marginLeft="6dp"        android:layout_marginRight="6dp"        android:layout_marginTop="6dp" /></LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="50dp"    android:background="#000"    android:orientation="vertical">    <Button        android:id="@+id/btButton"        android:layout_width="wrap_content"        android:layout_height="46dp"        android:layout_gravity="center"        android:text="我是按钮" /></LinearLayout>

为什么要这样写?

1、在Adapter类中直接设置Button的点击事件也是可以的

2、但是如果Button的点击事件需要操作Activity界面内容时,就需要把,

ListView中Button的点击事件编写在Activity中


0 0