2014-03-19 27 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

相关问题