使用适配器使用ImageButtons填充GridView并不起作用

时间:2017-05-14 16:09:42

标签: android gridview adapter android-imagebutton

我正在编写小型游戏应用程序以进行分配,例如"记忆"游戏。我想使用GridView并在其中放置ImageButtons以显示一个图像9次,并设置onClickListener以在每个图像下方显示随机数。我在layout中设置gridview,使用id来访问它,设置适配器来填充它,但它不起作用,我没有得到任何错误。另外,我试图找出代码中的错误,但失败了。

问题是,当我启动应用时,它是空白的,在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);
}
}

任何人都可以帮忙告诉我问题是什么?感谢。

2 个答案:

答案 0 :(得分:0)

让getCount返回buttons.length

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

答案 1 :(得分: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;
}

}