android适配器 ListView ,更改为一行

标签 android listview

我有一个包含项目的 listView,其中一个项目被突出显示。

当他们点击一个项目时,我希望突出显示的卡片不再突出显示,并突出显示新项目。

到目前为止我做了什么。

我用一个列表调用适配器,列表中的一项是defaultItem,是true还是false。

调用 getView 时,我有一个 if defaultItem,并且我更改了该项目的 UI。我还将该项目保存在名为 currentDefaultItem 的类变量中。

现在,当他们单击时,我可以更改列表,使旧的突出显示项变为 false,将单击的项变为 true。然后我调用 notifyDataSetChanged(); 然而,这似乎不起作用。

显示getView

@Override
public View getView(final int position, View v, ViewGroup parent) {
    ViewHolder holder;
    Card card = getItem(position);
    if (v == null) {
        v = mInflater.inflate(R.layout.row_cards, parent, false);

    holder = new ViewHolder();
        holder.tvName = (TextView) v.findViewById(R.id.tvName);
        holder.tvBrand = (TextView) v.findViewById(R.id.tvBrand);
    holder.tvLastFour = (TextView) v.findViewById(R.id.tvLastFour);
    holder.tvCounter = (TextView) v.findViewById(R.id.tvCounter);
    holder.tvCard = (ImageView) v.findViewById(R.id.tvCard);
        holder.arrow = (ImageView) v.findViewById(R.id.arrow);
        holder.tick = (ImageView) v.findViewById(R.id.tick);

        if (card.getDefaultcard().intValue()==(1)){
            holder.tick.setVisibility(View.VISIBLE);
            positionOfDefault=position;
        }


        String brand = card.getBrand();
        switch (brand.toLowerCase()){
            case "visa":
                holder.tvCard.setImageResource(R.drawable.visa2);
                break;
            case "mastercard":
                holder.tvCard.setImageResource(R.drawable.mastercardx2);
                break;
            case "diners":
                holder.tvCard.setImageResource(R.drawable.dinersclub2);
                break;
            case "amex":
                holder.tvCard.setImageResource(R.drawable.americanexpress2);
                break;
            case "jcb":
                holder.tvCard.setImageResource(R.drawable.jcg2);
                break;
            case "discover":
                holder.tvCard.setImageResource(R.drawable.discover);
                break;
        }

    holder.b_delete_in_list = (Button) v.findViewById(R.id.b_delete_in_list);

    holder.b_delete_in_list.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            deleteCard(position);
        }
    });
        holder.b_set_default = (Button) v.findViewById(R.id.b_set_default);

        holder.b_set_default.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                updatePaymentMethod(position);
            }
        });
    //
    v.setTag(holder);

    //
} else {
    holder = (ViewHolder) v.getTag();
}
    holder.tvName.setText(cardList.get(position).getName().toUpperCase());
    holder.tvBrand.setText(cardList.get(position).getBrand().toUpperCase());
    holder.tvLastFour.setText(cardList.get(position).getLast_four_digits());


    return v;
} 

最佳答案

试试这个

@Override
public View getView(final int position, View v, ViewGroup parent) {
    ViewHolder holder;
    Card card = getItem(position);
    if (v == null) 
    {
        v = mInflater.inflate(R.layout.row_cards, parent, false);
        holder = new ViewHolder();
        holder.tvName = (TextView) v.findViewById(R.id.tvName);
        holder.tvBrand = (TextView) v.findViewById(R.id.tvBrand);
        holder.tvLastFour = (TextView) v.findViewById(R.id.tvLastFour);
        holder.tvCounter = (TextView) v.findViewById(R.id.tvCounter);
        holder.tvCard = (ImageView) v.findViewById(R.id.tvCard);
        holder.arrow = (ImageView) v.findViewById(R.id.arrow);
        holder.tick = (ImageView) v.findViewById(R.id.tick);

        v.setTag(holder);
     } else {
         holder = (ViewHolder) v.getTag();
     }

     if (card.getDefaultcard().intValue()==(1))
     {
            holder.tick.setVisibility(View.VISIBLE);
            positionOfDefault=position;
     }
     String brand = card.getBrand();
     switch (brand.toLowerCase()){
            case "visa":
                holder.tvCard.setImageResource(R.drawable.visa2);
                break;
            case "mastercard":
                holder.tvCard.setImageResource(R.drawable.mastercardx2);
                break;
            case "diners":
                holder.tvCard.setImageResource(R.drawable.dinersclub2);
                break;
            case "amex":
                holder.tvCard.setImageResource(R.drawable.americanexpress2);
                break;
            case "jcb":
                holder.tvCard.setImageResource(R.drawable.jcg2);
                break;
            case "discover":
                holder.tvCard.setImageResource(R.drawable.discover);
                break;
        }

    holder.b_delete_in_list = (Button)v.findViewById(R.id.b_delete_in_list);

    holder.b_delete_in_list.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            deleteCard(position);
        }
    });
        holder.b_set_default = (Button) v.findViewById(R.id.b_set_default);

        holder.b_set_default.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                updatePaymentMethod(position);
            }
        });
    holder.tvName.setText(cardList.get(position).getName().toUpperCase());
    holder.tvBrand.setText(cardList.get(position).getBrand().toUpperCase());
    holder.tvLastFour.setText(cardList.get(position).getLast_four_digits());


    return v;
} 

关于android适配器 ListView ,更改为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38515071/

相关文章:

android - 在 native Android 库中保存/加载数据

android - 从 json 获取数据时,Spinner 默认没有选择

asp.net-mvc - 如何将第一个项目设置为在 ListView kendoui中选择

java - 如何根据行状态(选中,正常,...)更改 ListView 行内 TextView 的文本颜色?

android - 滚动后如何保存和维护ListView项目状态?

android - 单独的 IntentService 实例是否共享同一个队列?

java - 何时/不使用同步适配器

android - 如何在 android 中使用 super SDK 将文件写入外部存储?

android - 使用 Listview 和 OnItemClick 与 SQLite 加载数据

c# - WHILE 循环中的 ListView.FindItemWithText 在第一个 ListView 行后失败