2017-05-14 72 views
0

我正在写作业的小游戏应用程序,如“内存”游戏。我想使用GridView并将ImageButton放入它中以显示一个图像9次,并设置onClickListener以在每个图像下显示随机数。我在布局中设置gridview,使用id来访问它,设置适配器来填充它,但它不起作用,并且我没有错误。此外,我试图找出我的代码中有什么问题,但失败了。使用适配器填充GridView与ImageButtons不起作用

问题是当我启动应用程序时,它是空白的,没有在emlutaor屏幕上。

帮助。 这里是我适配器类:

public class ImageButtonAdapter extends BaseAdapter { 

ImageButton[] buttons; 
public Context c; 
public ImageButtonAdapter(Context c) { 
    this.c = c; 
    buttons = new ImageButton[9]; 
    for (int i=0;i<buttons.length;i++) { 
     buttons[i] = new ImageButton(c); 
     buttons[i].setImageResource(R.mipmap.gmicon); 
     buttons[i].setLayoutParams(new GridView.LayoutParams(300,300)); 
     buttons[i].setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Button btn = (Button)v; 
       btn.setText("5"); 
      } 
     }); 
    } 
} 


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

@Override 
public Object getItem(int position) { 
    return null; 
} 

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    return null; 
} 
} 

这里是gameActivity:

public class GameActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.game_layout); 
    GridView gv = (GridView)findViewById(R.id.grid); 
    ImageButtonAdapter adapter = new ImageButtonAdapter(this); 
    gv.setAdapter(adapter); 
} 
} 

谁能帮告诉我是什么问题?谢谢。

回答

0

我们必须orverride getView()方法对于每个项目在GridView控件或ListView显示。

请参阅本 - https://developer.android.com/reference/android/widget/Adapter.html

public class ImageButtonAdapter extends BaseAdapter { 

    ImageButton[] buttons; 
    public Context c; 
    public ImageButtonAdapter(Context c) { 
     this.c = c; 
     buttons = new ImageButton[9]; 
    } 


@Override 
public int getCount() { 
    return buttons.length; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

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

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    convertView = new ImageButton(c); 
    buttons[position] = convertView; 
    buttons[position].setImageResource(R.mipmap.gmicon); 
    buttons[position].setLayoutParams(new GridView.LayoutParams(300,300)); 
    buttons[position].setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Button btn = (Button)v; 
      btn.setText(position + ""); 
     } 
    }); 
    return convertView; 
} 

}

0

让你getCount将返回buttons.length

@Override public int getCount() 
    { 
    return buttons.length; 
    } 
+0

现在,我得到错误: 致命异常:主要 过程:com.androidassignment,PID:10879 显示java.lang.NullPointerException:试图调用对null对象引用的虚拟方法'int android.view.View.getImportantForAccessibility()' – Mystiq