2011-02-17 67 views
2

在我的可擴展列表視圖中,我有一個textView和一個imagebutton。當我點擊textView或可展開列表的子視圖時,它應該顯示一個alertbox。我可以通過使用onChildClick來實現這一點,但我在textView之後的子視圖中有一個imagebutton。當我點擊它時,它應該執行另一個活動。我不知道如何在可擴展列表中實現這個功能。如何爲展開式列表的子項實現不同的點擊事件?

這裏是我的擴展列表的代碼。請檢查一下。我也試過android:onClick="myClickHandler"。我得到一些illegalstateException

這裏是我的代碼:

import android.app.ExpandableListActivity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ExpandableListView; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.SimpleExpandableListAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.util.List; 
import java.util.ArrayList; 
import java.util.HashMap; 
import android.util.Log; 

public class CoctailsActivity extends ExpandableListActivity implements OnClickListener 
{ 
    private static final String LOG_TAG = "ElistCBox"; 
    public static ImageButton img_button; 

    static final String Group[] = { 
     "A", 
     "B", 
     "C", 
     "D" 
    }; 

    static final String Children[][] = { 
     { 
     "lightgrey", 
     "dimgray", 
     "sgi gray 92" 
     }, 
     { 
     "dodgerblue 2", 
     "steelblue 2", 
     "powderblue", 
     }, 
     { 
     "yellow 1", 
     "gold 1", 
     "darkgoldenrod 1", 
     }, 
     { 
     "indianred 1", 
     "firebrick 1", 
     "maroon", 
     } 
    }; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) 
    { 
     super.onCreate(icicle); 
     setContentView(R.layout.exp_list); 

     SimpleExpandableListAdapter expListAdapter =new SimpleExpandableListAdapter 
      (
       this, 
       createGroupList(), 
       R.layout.group_row, 
       new String[] { "Group" }, 
       new int[] { R.id.group_name },  
       createChildList(), 
       R.layout.child_row, 
       new String[] { "Children"}, 
       new int[] { R.id.child_name } 
      ); 
     setListAdapter(expListAdapter); 


    } 

    public void onContentChanged () 
    { 
     super.onContentChanged(); 
     Log.d(LOG_TAG, "onContentChanged"); 
    } 
    public void myClickHandler(View v) 
    { 
     Log.v(LOG_TAG, "insideMyHandler"); 



     ExpandableListView lvItems = getExpandableListView(); 
     for (int i=0; i < lvItems.getChildCount(); i++) 
     { 
      lvItems.getChildAt(i).setBackgroundColor(Color.BLUE);   
     } 



     LinearLayout vwParentRow = (LinearLayout)v.getParent(); 

     TextView child = (TextView)vwParentRow.getChildAt(0); 
     Button btnChild = (Button)vwParentRow.getChildAt(1); 
     btnChild.setText(child.getText()); 
     btnChild.setText("I've been clicked!"); 

     int c = Color.CYAN; 

     vwParentRow.setBackgroundColor(c); 
     vwParentRow.refreshDrawableState();  
    } 


    public boolean onChildClick(ExpandableListView parent,View v,int groupPosition,int childPosition,long id) 
    { 
     Log.d(LOG_TAG, "onChildClick: "+childPosition); 

     return false; 
    } 

    public void onGroupExpand (int groupPosition) { 
     Log.d(LOG_TAG,"onGroupExpand: "+groupPosition); 
    } 

    private List<HashMap<String, String>> createGroupList() { 
     ArrayList<HashMap<String, String>> result = new ArrayList<HashMap<String, String>>(); 
     for(int i = 0 ; i < Group.length ; ++i) { 
     HashMap<String, String> m = new HashMap<String, String>(); 
     m.put("Group",Group[i]); 
     result.add(m); 
     } 
     return (List<HashMap<String, String>>)result; 
    } 

    private List<ArrayList<HashMap<String, String>>> createChildList() { 
    ArrayList<ArrayList<HashMap<String, String>>> result = new ArrayList<ArrayList<HashMap<String, String>>>(); 
    for(int i = 0 ; i < Children.length ; ++i) 
    { 
// Second-level lists 
     ArrayList<HashMap<String, String>> secList = new ArrayList<HashMap<String, String>>(); 
     for(int n = 0 ; n < Children[i].length ; n += 2) 
     { 
     HashMap<String, String> child = new HashMap<String, String>(); 
     child.put("Children", Children[i][n]); 
     //child.put("rgb", shades[i][n+1]); 
     secList.add(child); 
     } 
     result.add(secList); 
    } 
    return result; 
    } 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    img_button =(ImageButton)v.findViewById(R.id.img01); 
    if(img_button!=null){ 
     Log.v(LOG_TAG, "onclick clickedddddd"); 
    } 

} 

} 

請幫助我。

回答

0

我還沒有嘗試過這個自己,但我在想,在點擊事件按鈕的可通過活動來處理,就像使用其他任何按鈕onclick事件。

可能有一個這篇文章通讀:http://developer.android.com/guide/topics/ui/ui-events.html

看看是否有幫助。

否則,我敢肯定,你可以建立一個onClick偵聽器對象,並通過它通過特定的按鈕。鏈接應該幫助你。

+0

Thanx的答覆.i嘗試所有這些東西。我在我的代碼中使用onChildClick事件,我曾經點擊imagebutton onchildclick事件只調用..爲什麼是這樣。 – Kris 2011-02-17 09:08:00

0

克里斯,爲什麼不實行ExpandableListAdapte河他們是API的演示樣本 - ExpandableList1.java,然後覆蓋getGroupViewgetChildView設置onClickListeners,只要你想。

相關問題