2013-04-25 58 views
0

当我们使用BaseAdapter时,需要创建另一个调用此类的类(ClassA)(MyBaseAdapter)。如果在BaseAdapter中的膨胀视图中包含按钮和另一个派发事件的控件,如何将这些事件委派给ClassA?在BaseAdapter中委派事件Android

我正在使用按钮,但将来我会添加EditText和另一个控件,但我不想在BaseAdapter类中管理这些事件。

回答

0

只是让活动实现了您和您在适配器中注册为监听器的监听器。

ActivityA implements OnClickListener { 

} 


YourAdapter extends BaseAdapter { 

YourAdapter(Context ctx,....) 

// Context is your activity 

}

button.setOnClickListener((ActivityA) ctx); 
+0

我会测试代码 – sneyder05 2013-04-25 20:21:30

0

这很难理解你的问题,但我会尽力回答你的问题。

不,您不必处理扩展BaseAdapter的类中的事件。您始终可以对保存适配器的片段或活动进行回调。

所以在适配器:

private OnButtonSelectedListener mListener; 

    public interface OnButtonSelectedListener { 
    void onButtonSelected(); 

} 

public void setListener (OnButtonSelectedListener listener) { 
mListener = listener; 

} 

//然后单击该按钮时调用:

mListener.onButtonSelected(); 

//在你的活动或片段,

//确保类实现OnButtonSelectedListener //然后添加未实现的方法

//你在哪里都实例化适配器,设置监听

coolAdapter = new CoolAdapter(mContext, listOfCoolStuff); 
coolAdapter.setListener(this); 

//然后在您的方法onButtonSelectedListener填写办理什么是你想做的事

private void onButtonSelected() { 

//handle your event here! 

} 

让我知道你是否有任何问题或如果我只是不正确地理解你的问题。祝你好运!

+0

该充气BaseAdapter包含2个按钮的XML(参见[链接](http://imageshack.us/photo/my-images/843/capturadepantalla201304m.png/) ,我想管理实例BaseAdapter的类中的OnClickListener,在BaseAdapter的扩展类中没有。您了解我吗? – sneyder05 2013-04-25 19:52:43

+0

我需要更多的代码和示例,因为我不明白你在说什么。很抱歉,我确实想帮忙! – 2013-04-25 20:10:34

+0

很简单,查看其他回复。它声明方法“public void onClick(View v){”在同一个类中(MyAdapter是BaseAdapter的扩展),但是我想创建相同的方法,但是在另一个类中,哪个实例的类MyAdapter。你明白我了吗? – sneyder05 2013-04-25 20:15:49

0

使用适配器作为一名听众:

public class MyAdapter extends BaseAdapter implements OnClickListener{ 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public Object getItem(int arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public long getItemId(int arg0) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // if you are in fragment 
      View v = getActivity().getLayoutInflater().inflate(R.layout.layout_settings_cell, null); 
      Button btn = v.findViewById(R.id.button1); 
      btn.setOnClickListener(this); 
      btn.setTag(Integer.valueOf(position)); 
      return v; 
     } 

     @Override 
     public void onClick(View v) { 
      int pos = (Integer) v.getTag(); 
      // your code 

     } 

    } 

只是抬高你的自定义列表项的布局。

所有的按钮都会有相同的ID,但是您可以在标签中放置位置参数来知道按下的确切按钮。

使您的A类适配器内部类具有一些您可以从适配器激活的方法。

+1

你在同一个班级管理点击事件,我想管理实例MyAdapter的班级中的那些事件,你了解我吗? – sneyder05 2013-04-25 19:55:05