android - 我的 ListView 无法正常工作

标签 android listview adapter

我在布局中添加 ListView 时遇到一个问题。我在一个页面中实现了一个 ListView,我们在其中获取项目列表,因为当我们单击某个 ListMember 时,它会更改其颜色,再次单击它会将其更改为以前的颜色。现在想象一下,由于项目高度,一个屏幕可以容纳最大5 列表项目,下一位成员需要向下滚动才能看到。

现在假设 List 成员是

项目 1

项目 2

项目 3

项目 4

项目 5

项目 6

项目 7

在这些用途中,一次只能看到 5 个项目,现在当我点击“项目 1”(前五个成员中的第一个成员)时,它的颜色正在改变(比如从白色变为绿色)但是当我向下滚动时我看到 '项目 6'(前五个成员中的第一个成员)也更改了颜色(变为绿色),当我单击“项目 6”时,这次该成员的 setOnItemClickListener 被实际触发并尝试将其颜色更改为已更改的颜色。

这是 setOnItemClickListener 的代码:

productList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {

            Log.i("imIn","Item Clicked");
            v.animate();
            if(listClicked[position]==0)
            {
                Log.i("***After*** ","Cyan Set ON");
                v.setBackgroundColor(Color.parseColor("GREEN"));
                listClicked[position]=1;
            }
            else if(listClicked[position]==1){
                Log.i("***After*** ","Cyan Set OFF");
                v.setBackgroundColor(Color.parseColor("WHITE"));

                listClicked[position]=0;

            }

        }
    });

AfterEdit::这是我的适配器

public class ProductListBaseAdapter extends BaseAdapter {
SharedPreferences sharedpreferences;

private static ArrayList<Product> searchArrayList;
private LayoutInflater mInflater;

ArrayList<TotalSelectedProduct> selectedProducts=new ArrayList<>();
final int[] listClicked;

   public ProductListBaseAdapter(Context context, ArrayList<Product> totalProducts, int[] ClickedList) {
    searchArrayList =totalProducts;
    mInflater = LayoutInflater.from(context);
   listClicked=ClickedList;    
}

public int getCount() {
    return searchArrayList.size();
}

public Object getItem(int position) {
    return searchArrayList.get(position);
}

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

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

    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.item_list, null);

        holder = new ViewHolder();

        holder.txtItem = (TextView) convertView.findViewById(R.id.item_name);
        holder.edit=(Button)convertView.findViewById(R.id.edit);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

   /** I have tried inserting onClickListener in adapter also .but resulting same
    *
    holder.txtItem.setText(searchArrayList.get(position).getItemName());    
    final View.OnClickListener makeListener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            v.animate();
            if(listClicked[position]==0)
            {
                Log.i("***After*** ","Cyan Set ON");
                v.setBackgroundColor(Color.parseColor("#ff2dbeff"));
                listClicked[position]=1;
            }
            else if(listClicked[position]==1){
                Log.i("***After*** ","Cyan Set OFF");
                v.setBackgroundColor(Color.parseColor("#009933"));
                listClicked[position]=0;

            }

        }
    };
    holder.txtItem.setOnClickListener(makeListener); */


    return convertView;
}

static class ViewHolder {
    TextView txtItem;
    Button edit;

}

为什么会这样?

最佳答案

要执行您想要的操作,您必须向 ListView 添加一个适配器,并在其中控制每个项目的点击方法。

更新示例

    public class ProductAdapter extends ArrayAdapter<Product> {

    public PProductAdapter(Activity activity,
            ArrayList<Product> products) {
        super(activity, R.layout.item_product, products);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final Product p = getItem(position);
        ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.item_product, parent,
                    false);
            viewHolder.name = (TextView) convertView.findViewById(R.id.tvName);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        convertView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                p.checked = !p.checked;
                if (p.checked)
                    v.setBackgroundColor(Color.parseColor("#ff2dbeff"));
                else
                    v.setBackgroundColor(Color.parseColor("#009933"));
            }
        });

        viewHolder.name.setText(p.name);
        return convertView;
    }

    private class ViewHolder {
        TextView name;
    }
}

public class Product{
    public String name;
    public boolean checked;
    Product() {
       name = "dummy name";
       checked = false;
    }
}

关于android - 我的 ListView 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724783/

相关文章:

android - SetImageResource() 在使用 CursorAdapter 的 ListView 中工作不正确

android - 隐藏键盘时 fragment 事务的自定义动画消失

android - 如何在 Mapbox Android SDK 中禁用旋转

java - Android nullpointerException - ListView

java - 使用 BaseAdapter 自定义 ListView

android - ListView SetAdapter NullPointerException异常

linux - 包括/配置/auto.conf.cmd : No such file or directory [Kali Linux]

Android 推特默认share-force关闭

android - 在 Android 上创建比屏幕尺寸更小的后备缓冲区

android - 从 Fragment 获取 Activity 中的 Adapter