Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 Android Studio在GridView中动态更改图像_Java_Android_Android Layout_Android Studio_Gridview - Fatal编程技术网

Java Android Studio在GridView中动态更改图像

Java Android Studio在GridView中动态更改图像,java,android,android-layout,android-studio,gridview,Java,Android,Android Layout,Android Studio,Gridview,我已成功设置了GridView,但是我希望能够根据变量更改GridView中的图像。例如: int a = 2 if (a == 2){ Integer[] images = { R.drawable.image1 R.drawable.image3 } } else { Integer[] images = ( R.drawable.image2 R.drawable.image4 } } 然而,

我已成功设置了GridView,但是我希望能够根据变量更改GridView中的图像。例如:

int a = 2
if (a == 2){
    Integer[] images = {
        R.drawable.image1
        R.drawable.image3
    }
} else {
    Integer[] images = (
        R.drawable.image2
        R.drawable.image4
    }
}
然而,我找不到一个方法来做到这一点。我目前使用的代码是:

    GridView cardList = (GridView) findViewById(R.id.cardList);
    cardList.setAdapter(new ImageAdapter(this));

    cardList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                                int position, long id) {
            Toast.makeText(Create.this, "" + position,
                    Toast.LENGTH_SHORT).show();
        }
    });
}

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

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

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

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

    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 GridView.LayoutParams(215, 215));
        } else {
            imageView = (ImageView) convertView;
        }

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

    private Integer[] images = {
            R.drawable.iamge1, R.drawable.image2
    };
}
GridView cardList=(GridView)findviewbyd(R.id.cardList);
setAdapter(新的ImageAdapter(this));
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
Toast.makeText(Create.this,“+”位置,
吐司。长度(短)。show();
}
});
}
公共类ImageAdapter扩展了BaseAdapter{
私有上下文;
公共图像适配器(上下文c){
mContext=c;
}
public int getCount(){
返回图像长度;
}
公共对象getItem(int位置){
返回null;
}
公共长getItemId(int位置){
返回0;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
if(convertView==null){
//如果没有回收,初始化一些属性
imageView=新的imageView(mContext);
setLayoutParams(新的GridView.LayoutParams(215215,215));
}否则{
imageView=(imageView)convertView;
}
setImageResource(图像[位置]);
返回图像视图;
}
私有整数[]图像={
R.drawable.iamge1,R.drawable.image2
};
}

尝试以下方法:

活动:

public class MainActivity extends AppCompatActivity {

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

    GridView gridView = (GridView) findViewById(R.id.gridView);
    int images[] = {R.drawable.ic_action_name};
    ImageAdapter imageAdapter = new ImageAdapter(getApplicationContext(),images);
    gridView.setAdapter(imageAdapter);

    }
}
您的适配器类:

public class ImageAdapter extends BaseAdapter {
private int images[];
Context context;

public ImageAdapter(Context context, int images[]){

    this.context = context;
    this.images = images;
}

private class Holder{
    ImageView imageView;
}

@Override
public int getCount(){
    return images.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 view, ViewGroup parent){
    //All of this Holder stuff is so that the View doesn't jump around wildly

    final Holder holder;
    LayoutInflater inflater;

    if (view == null){
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.singleimage,null);
        holder = new Holder();
        holder.imageView = (ImageView) view.findViewById(R.id.singleImage);
        view.setTag(holder);
    }
    else {
        holder = (Holder) view.getTag();}

    holder.imageView.setImageResource(images[position]);

    return view;

}
}
对于gridView中的单个图像,还需要一个简单的xml文件。将其命名为“singleimage.xml”


活动xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.ri.emily.testapp.MainActivity">    

    <GridView
        android:layout_width="match_parent"
        android:id="@+id/gridView"
        android:layout_height="match_parent" />
</RelativeLayout>

尝试以下方法:

活动:

public class MainActivity extends AppCompatActivity {

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

    GridView gridView = (GridView) findViewById(R.id.gridView);
    int images[] = {R.drawable.ic_action_name};
    ImageAdapter imageAdapter = new ImageAdapter(getApplicationContext(),images);
    gridView.setAdapter(imageAdapter);

    }
}
您的适配器类:

public class ImageAdapter extends BaseAdapter {
private int images[];
Context context;

public ImageAdapter(Context context, int images[]){

    this.context = context;
    this.images = images;
}

private class Holder{
    ImageView imageView;
}

@Override
public int getCount(){
    return images.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 view, ViewGroup parent){
    //All of this Holder stuff is so that the View doesn't jump around wildly

    final Holder holder;
    LayoutInflater inflater;

    if (view == null){
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.singleimage,null);
        holder = new Holder();
        holder.imageView = (ImageView) view.findViewById(R.id.singleImage);
        view.setTag(holder);
    }
    else {
        holder = (Holder) view.getTag();}

    holder.imageView.setImageResource(images[position]);

    return view;

}
}
对于gridView中的单个图像,还需要一个简单的xml文件。将其命名为“singleimage.xml”


活动xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.ri.emily.testapp.MainActivity">    

    <GridView
        android:layout_width="match_parent"
        android:id="@+id/gridView"
        android:layout_height="match_parent" />
</RelativeLayout>



当您使用您编写的代码时会发生什么?感谢您的回复,目前它工作正常,因为我得到了一个两列网格,其中包含图像数组中的所有图像,但我希望这样做,以便可以动态更改该数组中的值。通过这种方式,我可以过滤网格视图中的图像,使其仅显示一些。您希望如何触发更改?是的,我最终会添加一个过滤器按钮,它只会将某些图像添加到GridView中,因为现在我只需要变量就可以了,如果这样更容易解释的话,谢谢c:好的,我发布了一个答案,希望能帮助你开始!使用您编写的代码时会发生什么情况?感谢您的回复,目前它工作正常,因为我得到了一个两列网格,其中包含images数组中的所有图像,但我希望这样做,以便可以动态更改该数组中的值。通过这种方式,我可以过滤网格视图中的图像,使其仅显示一些。您希望如何触发更改?是的,我最终会添加一个过滤器按钮,它只会将某些图像添加到GridView中,因为现在我只需要变量就可以了,如果这样更容易解释的话,谢谢c:好的,我发布了一个答案,希望能帮助你开始!非常感谢,但是activity类的onCreate部分的第一位代码“inta=2…”在哪里?我是否还要为最后一部分使用ImageView创建一个单独的XML文件?(对不起,我是新的)@emilyhommerding是的,它将被重新创建。您最终会希望将其添加到onClickListener中,然后将任何更改通知您的适配器。是的,imageView有一个单独的XML文件。可以把它想象成一个通用的imageView,可以在gridView中的所有单独的图像中重复使用。“无法解析符号‘Holder’。”在使用Hodler@Emily Hommerding的任何地方都会发生这种情况。你将适配器作为一个单独的类,对吗?我添加了一个layoutInflater并澄清了xml文件。看看能不能帮上忙,谢谢!这已经修复了我的ImageAdapter类,但是我仍然在我的活动类中遇到这些错误:@EmilyHomeDingThanks对此表示感谢,但是活动类的onCreate部分的第一位代码“int a=2…”在哪里?我是否还要为最后一部分使用ImageView创建一个单独的XML文件?(对不起,我是新的)@emilyhommerding是的,它将被重新创建。您最终会希望将其添加到onClickListener中,然后将任何更改通知您的适配器。是的,imageView有一个单独的XML文件。可以把它想象成一个通用的imageView,可以在gridView中的所有单独的图像中重复使用。“无法解析符号‘Holder’。”在使用Hodler@Emily Hommerding的任何地方都会发生这种情况。你将适配器作为一个单独的类,对吗?我添加了一个layoutInflater并澄清了xml文件。看看能不能帮上忙,谢谢!这已经修复了我的ImageAdapter类,但是我仍然在活动类中遇到这些错误:@EmilyHommerding