2012-07-12 43 views
2

我的ExpandableListView有一些EditText框和按鈕(它是一個登錄/註冊屏幕)。 我想用一個開關盒的onClick函數來選擇已被點擊的按鈕並對它們做些什麼。ExpandableListView中按鈕的onClick方法

對於按鈕,我無法設置onClickListener。

所有這些都在我寫的Custom Expandable List Adapter Class中。

我知道有另一種方法來解決自定義可擴展列表適配器中的正常功能,但我不知道如何。

這裏的代碼片段相關WITHIN 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); 
     } 

} 

有人能隨心所欲助陣?

回答

2

我希望你在你的適配器中實現了OnClickListner。如果是的話,那麼你使用什麼錯誤forgot.setOnClickListener(this);

+0

我重新做了整個公司德和它的工作。 最終的解決方案是使用 setOnClickListener(this);只是由於某種原因以前沒有工作。雖然謝謝! – Karan 2012-07-18 19:04:41

0

好吧......你需要設置OnClickListener不是在視圖上,而是在特定的按鈕上。所以,你需要找到DisplayByID(找到編輯框,按鈕或其他)在該View forgot,然後設置onClickListener ON他們。

如...

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

一定要使用正確的OnClickListener,有兩個API中:)

+0

這就是我最終做的。但是我想只用一個onClick(View v)函數和一個開關盒來實現所有可能的按鈕。相反採取了更長的做法,並做了你所說的:) – Karan 2012-07-18 18:45:25

+0

好的,我設法讓所有的工作,onClick onClick – Karan 2012-07-18 19:12:10

+0

沒有問題,只是不要忘記接受答案,如果你使用它;) – Michal 2012-07-19 07:36:29

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適配器在結尾處加上

公共ExpandListViewAdapter(FragmentActivity背景,等等,等等,RecyclerViewClickListener clickListener)

4.在適配器在getChildView()

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