Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新GridView_Java_Android_Gridview - Fatal编程技术网

Java 更新GridView

Java 更新GridView,java,android,gridview,Java,Android,Gridview,当我点击一个项目时,我需要更新我的gridView。我尝试了很多东西,但都不管用。 我的活动有以下代码: public class GameActivity extends AppCompatActivity implements IGameView{ public GridGame _gridGame = new GridGame(); public GamePresenter _presenter = new GamePresenter(this, _gridGame); public I

当我点击一个项目时,我需要更新我的gridView。我尝试了很多东西,但都不管用。 我的活动有以下代码:

public class GameActivity extends AppCompatActivity implements IGameView{

public GridGame _gridGame = new GridGame();
public GamePresenter _presenter = new GamePresenter(this, _gridGame);
public ImageAdapter _imageAdapter = new ImageAdapter(this, _gridGame);

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_help) {
        Intent intent = new Intent(this, HelpActivity.class);
        startActivity(intent);
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);

    final Context context = this;

    final GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(_imageAdapter);

    gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                                int position, long id) {
            _presenter.addPawn(position);
            _imageAdapter.update(position, _presenter.actualPlayer);
            Toast.makeText(context, "" + position,Toast.LENGTH_SHORT).show();
        }
    });
}
公共类GameActivity扩展AppCompativity实现IGameView{
public GridGame_GridGame=new GridGame();
PublicGamePresenter\u presenter=新的GamePresenter(此为网格游戏);
public-ImageAdapter\u-ImageAdapter=新的ImageAdapter(这个,\u-gridGame);
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u帮助){
意向意向=新意向(此,HelpActivity.class);
星触觉(意向);
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_游戏);
最终上下文=此;
final GridView GridView=(GridView)findviewbyd(R.id.GridView);
setAdapter(_imageAdapter);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
_演示者。addPawn(位置);
_imageAdapter.update(位置,\u presenter.ActualLayer);
Toast.makeText(上下文“+”位置,Toast.LENGTH_SHORT.show();
}
});
}
和imageAdapter的代码:

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    private GridGame _gridGame;
public ImageAdapter(Context c, GridGame grid) {
    mContext = c;
    _gridGame = grid;
}

public int getCount() {
    return grid.length;
}

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

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

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new ViewGroup.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    setGrid();

    imageView.setImageResource(grid[position]);
    return imageView;
}

private Integer[] grid = new Integer[42];

public void setGrid() {
    for(int i = 0; i < 42; i++){
        grid[i] = R.drawable.square;
    }
}

public void update(int id, int player){
    grid[id] = R.drawable.ic_notifications_black_24dp;
}
公共类ImageAdapter扩展了BaseAdapter{
私有上下文;
私人游戏(GridGame);;
公共ImageAdapter(上下文c、GridGame网格){
mContext=c;
_网格游戏=网格;
}
public int getCount(){
返回网格长度;
}
公共对象getItem(int位置){
返回null;
}
公共长getItemId(int位置){
返回0;
}
//为适配器引用的每个项目创建新的ImageView
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
if(convertView==null){
//如果没有回收,初始化一些属性
imageView=新的imageView(mContext);
setLayoutParams(新的ViewGroup.LayoutParams(85,85));
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
设置填充(8,8,8,8);
}否则{
imageView=(imageView)convertView;
}
setGrid();
setImageResource(网格[位置]);
返回图像视图;
}
私有整数[]网格=新整数[42];
公共void setGrid(){
对于(int i=0;i<42;i++){
网格[i]=R.可绘制方形;
}
}
公共无效更新(int-id,int-player){
网格[id]=R.drawable.ic\u通知\u黑色\u 24dp;
}

当我单击一个正方形(gridview上的项目)时,我希望视图更新a显示另一个图像,而不是正方形。当我在ImageAdapter上调用update方法时,更新完成,但视图不更新。

您需要通知适配器数据元素已更改。尝试此
更新()
方法:

public void update(int id, int player){
    grid[id] = R.drawable.ic_notifications_black_24dp;
    notifyDataSetChanged();
}

您需要通知适配器数据元素已更改。请尝试此
update()
方法:

public void update(int id, int player){
    grid[id] = R.drawable.ic_notifications_black_24dp;
    notifyDataSetChanged();
}

首先,您需要修复返回所需数据的方法,以便适配器将项对象标识为

// return the new data from sourcein case of update
public Object getItem(int position) {
    return grid[position];
}

// don't send 0 always
public long getItemId(int position) {
    return position;
}

// invoke notifyDataSetChanged(); when there is a change in data source
public void update(int id, int player){
    grid[id] = R.drawable.ic_notifications_black_24dp;
    notifyDataSetChanged();
}

首先,您需要修复返回所需数据的方法,以便适配器将项对象标识为

// return the new data from sourcein case of update
public Object getItem(int position) {
    return grid[position];
}

// don't send 0 always
public long getItemId(int position) {
    return position;
}

// invoke notifyDataSetChanged(); when there is a change in data source
public void update(int id, int player){
    grid[id] = R.drawable.ic_notifications_black_24dp;
    notifyDataSetChanged();
}

好的,我发现了问题,我在
getView(int位置,View convertView,ViewGroup父项);
中设置了网格,但它应该在构造函数中设置。
问题是,每次我单击一个项目时,它都会重置网格中的值,因此该值没有更改。

好的,我发现了问题,我在
getView(int-position,View-convertView,ViewGroup-parent);
中设置网格,但它应该在构造函数中设置。
问题是,每次我单击一个项目时,它都会重置网格中的值,因此值没有更改。

什么是
ImageAdapter
继承自?我忘记了那部分代码,但它扩展了baseadapter什么是
ImageAdapter
继承自?我忘记了那部分代码,但它扩展了baseadapter它是唯一的修改吗我必须做的操作?因为它似乎不起作用。这是我必须做的唯一修改吗?因为它似乎不起作用。我不明白为什么,但我已经做了更改,它不起作用。也许我遗漏了一些东西,但活动已订阅到适配器,适配器调用notifyDataSetChanged();当我调用update方法时。我不明白为什么,但我已经做了更改,但它不起作用。可能我缺少一些内容,但活动已订阅到适配器,适配器调用notifyDataSetChanged();当我调用update method.opps时,我自己错过了那个调用,很高兴你解决了它..继续!opps,我自己错过了那个调用,很高兴你解决了..继续!