2014-03-19 26 views
1

我無法訪問gridview中的按鈕。我的gridview被放置在使用customAdpater的對話框中。請幫幫我!!! 下面是我的代碼在gridview中的對話框的按鈕gridview中獲取null視圖android

1)在onCreate()方法:

dialog = new Dialog(this); 
      dialog.setContentView(R.layout.question_pallet); 
      dialog.setTitle("Question Pallet..."); 
      gridView = (GridView) dialog.findViewById(R.id.grid_view); 

      gridView.setAdapter(new ImageAdapter(QuestionBankActivity.this,allQuestions)); 
Button b = (Button) gridView.findViewWithTag("Hi"); //returning null 
Button b = (Button) gridView.getChildAt(0); //returning null 

2)question_pallet.xml是這樣

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/grid_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:numColumns="auto_fit" 
    android:columnWidth="70dp" 
    android:gravity="center" 
    android:stretchMode="columnWidth" > 

</GridView> 

3)ImageAdapter.java我grdview是

public class ImageAdapter extends BaseAdapter { 
private Activity mContext; 

List<GATEQuesAnswer> allQuestions; 
static Button b[] = new Button[65] ; 
int next_counter = 1; 

private int pos; 
// Constructor 
public ImageAdapter(Activity c, List<GATEQuesAnswer> allgeteQuestions){ 
    mContext = c; 
    allQuestions = allgeteQuestions; 
} 

public ImageAdapter(QuestionBankActivity questionBankActivity) { 
    mContext = questionBankActivity; 
} 

@Override 
public int getCount() { 
    return 65; 
} 



@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) {   
    Button button; 
    //if (convertView == null) { 
     button = new Button(mContext); 
     button.setText(Integer.toString(pos++)); 
     button.setId(position); 
     button.setTag("Hi"); 

    //} 
    //else 
    //{ 
     //button = (Button) convertView; 
     //Log.i("mytag", b.length+""); 
    //} 

    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 


      ((QuestionBankActivity)mContext).navigate_to_ques(position+1); 

     } 
    }); 
    button.setLayoutParams(new GridView.LayoutParams(70, 70)); 
    return button; 
} 

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

}

我已經嘗試了所有的可能性,如給每個按鈕的獨特id並獲取它使用gridview.findViewById()或getChildAt(索引),但沒有任何工作:( 任何幫助將不勝感激! 在此先感謝!

回答

0

您getView方法是完全錯誤的,嘗試的東西,如...

@Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      ViewHolder holder = null; 
      Log.v("ConvertView", String.valueOf(position)); 

      if (convertView == null) { 
       LayoutInflater vi = (LayoutInflater) getActivity() 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = vi.inflate(R.layout.row, null); 

       holder = new ViewHolder(); 
       holder.button = (Button) convertView 
         .findViewById(R.id.ID_OF_YOUR_BUTTON); 
       holder.button.setTag("HI"); 
       convertView.setTag(holder); 

       holder.button.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
           //DO YOUR CODE 
        } 
       }); 

      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      return convertView; 
     } 
    } 


private class ViewHolder { 
        Button button; 
     } 

//編輯

而且,你可以遍歷一個GridView控件的所有兒童(或任何其他的ViewGroup)與getChildAt():

for(int i=0; i<gridView.getChildCount(); i++) { 
    Button child = (Button) gridView.getChildAt(i); 
    // do stuff with child view 
} 

row.xm升

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="5dp" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
    </Button> 

</LinearLayout> 
+0

非常感謝你爲你的快速答覆:)但是它給了我error.I是新至Android請詳細more.Code我不明白的是1)我在getActivity拿到號線5錯誤()沒有被定義,當我用我的上下文對象替換getActivity()時,錯誤消失了!我不知道這是對還是錯。2)什麼是R.layout.row? 3)我沒有在xml上的按鈕,所以我提供什麼應該R.id.ID_of_your _button請幫我在這個問題。 – user2823274

+0

1)它的OK ...你做了一個正確的事情(我通過的代碼是爲碎片設計的),並知道我知道它的活動......所以從來沒有想過2)編輯答案,你可以找到R.layout.row有3)R.id.button1 –

+0

嗨,仍然不工作我認爲我錯了某處可能在onCreate()方法請檢查我的代碼,並給我suggetions .. – user2823274

相關問題