【问题标题】:How to increase value in each row of a ListView separately using separate button in each row?如何使用每行中的单独按钮分别增加 ListView 每一行的值?
【发布时间】:2017-09-11 16:14:04
【问题描述】:

我有一个 ListView,在每个列表视图中我都有一个按钮和一个 TextView。单击按钮时,我想增加 TextView 中显示的 te 值。我可以增加 TextView 中的值,但问题是该值在 TextView 的下一行中从它在前一个 TextView 中的位置递增。

但我想从 1 开始每一行。我该怎么做?

这是我的代码

MainActivity.java

public class MainActivity extends AppCompatActivity {


    ListView lv;
    TextView t;
int q=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    lv= (ListView) findViewById(R.id.list);
lv.setAdapter(new MyAd(this));
    }

public void hand(View v)
{
final    RelativeLayout rl= (RelativeLayout) v.getParent();
    Button b= (Button) rl.getChildAt(2);

    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            t= (TextView) rl.getChildAt(1);
            quantity();


        }
    });
}


public  void quantity()
{
    q=q+1;
    t.setText(""+q);
}
}

编辑 1:

我的问题在某种程度上得到了解决。我可以为每个按钮单击单独的行单独增加值,但该值不会反映在文本视图中。如何在文本视图中体现出来?

我的代码:

MainActivity.java

public class MainActivity extends AppCompatActivity  implements MyAd.customButtonListener {


    ListView lv;

int q=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    lv= (ListView) findViewById(R.id.list);
       MyAd ma=new MyAd(this);
        ma.setCustomButtonListner(this);
        lv.setAdapter(ma);
    }



    @Override
    public void onButtonClickListner(int position,TextView t) {
        q=q+1;
       t.setText(""+q);
    }
}

MyAd.java

class MyAd extends BaseAdapter {
int q=0,a[];
    List<ListItem> li=new ArrayList<>();
    Context c;
    MyViewHolder mvh;
    customButtonListener customListner;



MyAd(Context c)
{
    this.c=c;
    Resources res=c.getResources();
    String title[]=res.getStringArray(R.array.title);
a=new int[title.length];


    for(int i=0;i<title.length;i++)
    {
        li.add(new ListItem(title[i]));
    }
}







    public interface customButtonListener
    {
       void onButtonClickListner(int position, TextView t);
    }




    public void setCustomButtonListner(customButtonListener listener)
    {
        this.customListner = listener;
    }







    @Override
    public int getCount() {
        return li.size();
    }

    @Override
    public Object getItem(int i) {
        return i;
    }

    @Override
    public long getItemId(int i) {
        return i;
    }





    @Override
    public View getView(final int position, View view, ViewGroup parent) {
View row=view;


if(row==null) {

    LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row = inflater.inflate(R.layout.list_item, parent, false);
 mvh=new MyViewHolder();
    mvh.txt=row.findViewById(R.id.txt);
    mvh.quan=row.findViewById(R.id.quan);
    mvh.bt=row.findViewById(R.id.button);
row.setTag(mvh);
}
else
{
    mvh= (MyViewHolder) row.getTag();
}


 ListItem sr=li.get(position);
//String s=sr.title;
        mvh.txt.setText(sr.title);
        mvh.bt.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       q=a[position];
        mvh.quan.setText(String.valueOf(q++));
a[position]=q;
System.out.println("position:"+position+"-"+q);
        notifyDataSetChanged();    }
});
        return row;
    }


    class MyViewHolder
    {
        TextView txt,quan;
        Button bt;
    }
}

ListItem.java

public class ListItem {

    String title;

    ListItem(String title)
    {
        this.title=title;
    }


}

【问题讨论】:

  • 您需要使用 POJO 类来维护您的特定产品数量。
  • 编辑 1:我的问题在一定程度上解决了

标签: android listview buttonclick


【解决方案1】:

除非您发布自定义适配器代码,否则我无法完全告诉您代码有什么问题,但据我所知,您的问题:

  1. ListView 有一个 onItemClickListener,当您单击任何项​​目时会调用它,但当您单击项目的任何部分时会发生这种情况。
  2. 为了让您仅在单击按钮时获得回调,您需要为按钮设置 onClickListener 并在 onClick() 中调用接口函数。在这个回调函数中,您将编写代码来更改您的 TextView 值。
  3. 更改数据集后,您将调用 adapter.notifyDatasetChanged() 以反映列表视图中的更改。

如果我正确理解您的问题,这个tutorial 可能会帮助您实现您想要的。

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 2023-04-02
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多