Java Android Studio在GridView中动态更改图像
我已成功设置了GridView,但是我希望能够根据变量更改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 } } 然而,
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