我试图在我的适配器中使用getView方法的gridview,它不工作?

时间:2016-08-17 17:31:49

标签: android android-fragments gridview

下面是我的适配器类

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;

}

1 个答案:

答案 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始终读取模型,事件处理程序始终更新模型。如果您发现自己试图从事件处理程序中更改视图,那么您就知道自己做错了什么。