2

我的 ExpandableListView 有一些 EditText 框和按钮(这是一个登录/注册屏幕)。我想使用带有开关盒的 onClick 函数来选择已单击的按钮并对其进行处理。

对于按钮,我无法设置 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);
        }

}

有人可以帮忙吗??

4

3 回答 3

2

我希望你已经OnClickListner在你的适配器中实现了。如果是,那么您在使用时遇到了什么错误forgot.setOnClickListener(this);

于 2012-07-16T07:27:23.320 回答
0

好吧...您需要在视图上而不是在特定按钮上设置 OnClickListener。因此,您需要在其中找到 ViewByID(找到 EditBox、Buttons 或其他内容),View forgot然后在它们上设置 onClickListener。

如...

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

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

于 2012-07-16T08:48:37.670 回答
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.在您的适配器中的构造函数中添加最后

public ExpandListViewAdapter(FragmentActivity上下文等,RecyclerViewClickListener clickListener)

4. 在你的适配器中 getChildView()

   button1.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
               v.setTag(YourObject);
               clickListener.recyclerViewListClicked(v);
            }
   });
于 2015-08-13T15:43:44.617 回答