ExpandableListView中按钮的onClick方法

时间:2012-07-12 16:45:08

标签: android eclipse button expandablelistview

我的ExpandableListView有一些EditText框和按钮(这是一个登录/注册屏幕)。 我想使用带开关盒的onClick函数来选择已被单击的按钮并对它们执行某些操作。

对于Buttons,我无法设置onClickListener。

所有这些都在自定义可扩展列表适配器类中,而不是我写的。

我知道还有另一种方法来解决自定义可扩展列表适配器中的正常功能,但我不知道如何。

以下是我在CustomExpandableAdapter类中的相关代码片段:

    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
   v = null;
   position = 0;
   position=getChildId(groupPosition, childPosition);

   * - - unrelated code - *

   if(position==2)  //Draws Forgot Button
   {
       v = inflater.inflate(R.layout.forgot, parent, false);
       View forgot = v.findViewById(R.id.fpb);
       //What goes here to setOnClickListener?   
   }
   return v;
}

public void onClick(View w) {

    PopupWindow pw= new PopupWindow(inflater.inflate(R.layout.popup_layout, null, false),220,160, true);;
    switch(w.getId())
    {
    case R.id.fpb:

        {       
            pw.showAtLocation(v, Gravity.CENTER, 0, 0);
        }

}

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

我希望您在适配器中实现了OnClickListner。如果是,那么使用forgot.setOnClickListener(this);

时会出现什么错误

答案 1 :(得分:0)

好吧......你需要在视图上设置OnClickListener,而不是在特定按钮上。所以你需要在View forgot中找到ViewByID(找到EditBox,Buttons或其他),然后在它们上面设置onClickListener。

比如......

Button b = forgot.findViewByID("myButton");
b.setOnClickListener(new OnClickListener {
    etc...

一定要使用正确的OnClickListener,API中有两个!:)

答案 2 :(得分:0)

可能存在更好的解决方案,但这就是我的工作:

<强> 1。接口

import android.view.View;

public interface RecyclerViewClickListener {
    public void recyclerViewListClicked(View v);
}

<强> 2。在您的活动/片段

public class MyFragment(or Activity) Fragment implements RecyclerViewClickListener {

将显示未实现方法的错误。添加它们

@Override public void recyclerViewListClicked(View v) {
    YourObject mObject = (YourObject) v.getTag();
    Log.i("My Object with >>> ", String.valueOf(mObject.getId()));
}

第3。在consturctor的适配器中添加

public ExpandListViewAdapter(FragmentActivity context等等,RecyclerViewClickListener clickListener)

<强> 4。在您的适配器中的getChildView()

   button1.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
               v.setTag(YourObject);
               clickListener.recyclerViewListClicked(v);
            }
   });