Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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
Android GridView OnClick侦听器不';我有时不工作_Android_Gridview_Custom Adapter_Recycle - Fatal编程技术网

Android GridView OnClick侦听器不';我有时不工作

Android GridView OnClick侦听器不';我有时不工作,android,gridview,custom-adapter,recycle,Android,Gridview,Custom Adapter,Recycle,我有个奇怪的问题。我有一个包含9项(0-8)的gridView(可以是多/少)。如下图所示,它显示了我的设备屏幕上的前4项 每当单击项目时,都会添加一个绿色的勾号。它几乎每次都能正常工作。但每当我向下滚动并快速单击时,第5个(第4项)项的click listener不会立即触发。这可能是一个小问题,但从用户的角度来看,有时可能有点烦人。请告诉我怎样才能使它完美无瑕?以下是我的customAdapter的代码: @Override public View getView(final i

我有个奇怪的问题。我有一个包含9项(0-8)的gridView(可以是多/少)。如下图所示,它显示了我的设备屏幕上的前4项

每当单击项目时,都会添加一个绿色的勾号。它几乎每次都能正常工作。但每当我向下滚动并快速单击时,第5个(第4项)项的click listener不会立即触发。这可能是一个小问题,但从用户的角度来看,有时可能有点烦人。请告诉我怎样才能使它完美无瑕?以下是我的customAdapter的代码:

 @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {

        View rowView = convertView;
        Holder holder = null;

        if (rowView == null) {
            inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflater.inflate(R.layout.single_griditem_gitfamount, null);
            holder = new Holder();
            holder.textViewGiftAmount = (TextView) rowView.findViewById(R.id.textViewGridAmount);
            holder.imageViewGiftTick = (ImageView) rowView.findViewById(R.id.imageViewGridTick);
            holder.cardViewGridAmount = (CardView) rowView.findViewById(R.id.cardViewGridAmount);
            rowView.setTag(holder);
        } else {
            rowView = convertView;
            holder = (Holder) rowView.getTag();
        }
        holder.textViewGiftAmount.setText("Item " + position);

            if (position == clickedpos) {
                holder.imageViewGiftTick.setVisibility(View.VISIBLE);
            }
            else{
                holder.imageViewGiftTick.setVisibility(View.GONE);
            }

         //  final Holder h = holder;
           holder.cardViewGridAmount.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                clickedpos = position;
                notifyDataSetChanged();

            }
        });

        return rowView;
    }

如果您正在单击完整项,则可以选择itemclicklistener

gridview.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
        }
    });
gridview.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Toast.makeText(MainActivity.this,“+”位置,Toast.LENGTH_SHORT.show();
}
});

您也可以使用recyclerview。

如果您正在单击完整的项目,则可以选择项目ClickListener

gridview.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
        }
    });
gridview.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Toast.makeText(MainActivity.this,“+”位置,Toast.LENGTH_SHORT.show();
}
});

你也可以使用recyclerview。

为什么不使用recyclerview呢。它比这更好。我怎样才能像在recyclerView中的gridView那样在每行显示2个项目?您可以通过@Uma Achanta使用gridlayoutmanagergo。非常感谢您的帮助。最后一个问题,你确定切换到recyclerview会提供更好的性能吗?为什么不选择recyclerview呢。它比这更好。我怎样才能像在recyclerView中的gridView那样在每行显示2个项目?您可以通过@Uma Achanta使用gridlayoutmanagergo。非常感谢您的帮助。最后一个问题,您确定切换到recyclerview会提供更好的性能吗?