下面是我的适配器类
public class ImageAdapter extends BaseAdapter {
private Context context;
public static ProfileData[]profileData={
new ProfileData(R.drawable.profileone,"profile1"),
new ProfileData(R.drawable.profiletwo,"profile2"),
new ProfileData(R.drawable.profilethree,"profile3"),
new ProfileData(R.drawable.profilefour,"profile4"),
new ProfileData(R.drawable.profilefive,"profile5"),
};
public ImageAdapter(Context context){
this.context=context;
}
@Override
public int getCount() {
return profileData.length;
}
@Override
public Object getItem(int position) {
return profileData[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
ImageView imageView=new ImageView(context);
imageView.setImageResource(profileData[position].getDrawable());
return imageView;
}
}
正如您所知,我创建了一个适配器来将imageview imageresource设置为配置文件。但是,我正在片段中实现itemonclick方法,我试图将imageview放在特定的位置,但它不起作用,有人可以告诉我为什么吗? 这是我正在尝试获取imageview的片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_welcome_fourth,container,false);
adapter=new ImageAdapter(getContext());
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
ImageView image=(ImageView) adapter.getView(position,view,null);
image.setColorFilter(Color.BLUE);
}
});
return view;
}
答案 0 :(得分:0)
那是因为getView()
仅供视图用于填写列表项,而不是其他任何内容。
您需要做的是在适配器中使用某种变量来保存列表项的状态。我假设,因为您在点击时突出显示整个列表项,这是一个&#34;选择&#34;国家的类型。
例如,你可以在适配器中使用它:
private boolean[] selected = new boolean[profileData.length];
(这是一种简单的方法,而不是最好的方法。)
也是公共制定者:
public void setSelected(int position, boolean sel) {
selected[position] = sel;
notifyDataSetChanged();
}
在getView
中,您可以使用此标志设置颜色:
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
ImageView imageView=new ImageView(context);
imageView.setImageResource(profileData[position].getDrawable());
if (selected[position]) {
imageView.setColorFilter(Color.BLUE);
} else {
imageView.setColorFilter(null);
}
return imageView;
}
在事件处理程序中,您更新模型并调用notifyDataSetChanged()
:
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
ImageAdapter adapter = (ImageAdapter) adapterView.getAdapter();
adapter.setSelected(position, true);
}
});
因此getView
始终读取模型,事件处理程序始终更新模型。如果您发现自己试图从事件处理程序中更改视图,那么您就知道自己做错了什么。