在设置列表项的TextView文本按钮的点击 [英] set text in textview of a list item on click of button

查看:265
本文介绍了在设置列表项的TextView文本按钮的点击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个列表视图如本image.Link:

I have created a list view as shown in this image.Link:

图片

问题:我想,如果在用户点击按钮 + - 它显示当前 0 递增或递减计数。但是,如果我点击第一项的按钮TextView是被一些其他行更新。我不知道如何实现这一点。

Problem: I want that if the user clicks on the button + or - the textview which is currently showing 0 is incremented or decremented accordingly. But if I click first item's button the textview is updated in some other row. I don't know how to implement this.

下面是code:

public class HomePage extends Fragment {

    String[] listitems;
    int[] images = { R.drawable.cadburysilk, R.drawable.cadburys_dairymilk,
            R.drawable.perk, R.drawable.kitkat,
            R.drawable.nestlemunchchocolate, R.drawable.cadbury_bournville_bar,
            R.drawable.snickers };
    ListView list;
    DBAdapter dbadapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        View rootview = inflater.inflate(R.layout.activity_home_page,
                container, false);
        View view = View.inflate(getActivity(), R.layout.headerview, null);

        Resources res = getResources();
        listitems = res.getStringArray(R.array.items);
        list = (ListView) rootview.findViewById(R.id.itemslist);
        list.addHeaderView(view);
        AdapterClass adapterClass = new AdapterClass(this.getActivity(),
                listitems, images);
        list.setAdapter(adapterClass);
        return rootview;
    }

}

class AdapterClass extends ArrayAdapter<String> {
    Context context;
    int[] images;
    String[] names;
    Button add, sub;
    TextView number;
    Integer count=0;

    static class ViewHolder {
        public TextView textView;
        public ImageView imageView;

    }

    public AdapterClass(Context c, String[] items, int imgs[]) {
        // TODO Auto-generated constructor stub
        super(c, R.layout.rowlayout, R.id.quantity, items);
        this.context = c;
        this.images = imgs;
        this.names = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View row = convertView;
        // reuse views

        if (row == null) {

            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.rowlayout, parent, false);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.imageView = (ImageView) row.findViewById(R.id.img);
            viewHolder.textView = (TextView) row.findViewById(R.id.textView1);
            add = (Button) row.findViewById(R.id.button1);
            add.setTag(position);
            sub = (Button) row.findViewById(R.id.button2);
            sub.setTag(position);
            number = (TextView)row.findViewById(R.id.quantity);

            row.setTag(viewHolder);
        }
        ViewHolder holder = (ViewHolder) row.getTag();
        holder.imageView.setImageResource(images[position]);
        holder.textView.setText(names[position]);
        add.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                count=count+1;
                number.setText(count.toString());
            }
        });

        sub.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                count=count-1;
                number.setText(count.toString());
            }
        });
        return row;
    }



}

请帮忙。此外,我需要如何显示其TextView的包含下一个活动或片段正数的项目帮助。

Please help. Also i need help in how to show the items whose textview contains positive number in next activity or fragment.

推荐答案

按照与user370305答案初始查询。

Follow initial query with answer by user370305.

请帮忙。此外,我需要如何显示其TextView的包含下一个活动或片段正数的项目帮助。

Please help. Also i need help in how to show the items whose textview contains positive number in next activity or fragment.

创建一个数据结构,我正在一个HashMap,其中关键是将String.valueOf(位置)和值是计数INT。

Create a data structure, I am taking a HashMap , where key is String.valueOf(position) and Value is count int.

您知道钥匙因为这将是从0位置到listitem.length。使用此键就可以得到的计数值,并检查是否有积极的。

You know the keys since it will be from position "0" to listitem.length. Using the key you can get the count values and check for positive ones.

为什么的Hashmap:因你而改变每次算新值将被覆盖。 (只有一个唯一的密钥维持在HashMap中)。

Why Hashmap: because everytime you change count the new value will be overriden. (Only one unique key is maintained in hashmap).

(位置= 0,计数= 0) - > - 点击第0行 - >(位置0,计数= -1)将重点= 0细胞重写

(position = 0, count = 0) --> - clicked on 0th row--> (position 0 , count = -1) will be overriden on key = 0 cell.

完成code(带号增量修复并具有数据结构设置正值):

Complete code (with number increment fix and having set of positive value in DataStructure):

public class HomePage extends Fragment { 

    String[] listitems;
    int[] images = { R.drawable.cadburysilk, R.drawable.cadburys_dairymilk,
            R.drawable.perk, R.drawable.kitkat,
            R.drawable.nestlemunchchocolate, R.drawable.cadbury_bournville_bar,
            R.drawable.snickers };
    ListView list;
    DBAdapter dbadapter;

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub 

        View rootview = inflater.inflate(R.layout.activity_home_page,
                container, false);
        View view = View.inflate(getActivity(), R.layout.headerview, null);

        Resources res = getResources();
        listitems = res.getStringArray(R.array.items);
        list = (ListView) rootview.findViewById(R.id.itemslist);
        list.addHeaderView(view);
        AdapterClass adapterClass = new AdapterClass(this.getActivity(),
                listitems, images);
        list.setAdapter(adapterClass);
        return rootview;

        //You can use adapterClass.getPositiveNumber(); to retrieve all positive rows and the values!
        //Unique key will be String : 1,2,3....listitems.length. 

    } 

} 

class AdapterClass extends ArrayAdapter<String> {
    Context context;
    int[] images;
    String[] names;
    Button add, sub;
    ViewHolder holder; // Since will be accessed inside onclick

    HashMap<String,Integers> positiveNumbers = new HashMap<String,Integers>;
    Integer count=0;

    static class ViewHolder { 
        public TextView textView;
        public ImageView imageView;
        public TextView number;
        public String uniqueKey;

    } 

    public AdapterClass(Context c, String[] items, int imgs[]) {
        // TODO Auto-generated constructor stub 
        super(c, R.layout.rowlayout, R.id.quantity, items);
        this.context = c;
        this.images = imgs;
        this.names = items;
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub 
        View row = convertView;
        // reuse views 

        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.rowlayout, parent, false);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.imageView = (ImageView) row.findViewById(R.id.img);
            viewHolder.textView = (TextView) row.findViewById(R.id.textView1);
            viewHolder.number = (TextView)row.findViewById(R.id.quantity);
            viewHolder.uniqueKey = String.valueOf(position);
            add = (Button) row.findViewById(R.id.button1);
            add.setTag(position);
            sub = (Button) row.findViewById(R.id.button2);
            sub.setTag(position);
            row.setTag(viewHolder);

        } 
        holder = (ViewHolder) row.getTag();  //keeping one global memory
        holder.imageView.setImageResource(images[position]);
        holder.textView.setText(names[position]);
        add.setOnClickListener(new OnClickListener() {
            @Override 
            public void onClick(View v) {
                // TODO Auto-generated method stub  
                count=count+1;
                holder.number.setText(count.toString());
                positiveNumbers.put(holder.uniqueKey,count); //Key -> String.valueOf(position) and Value -> int count
            } 
        }); 

        sub.setOnClickListener(new OnClickListener() {
            @Override 
            public void onClick(View v) {
                // TODO Auto-generated method stub 
                count=count-1;
                holder.number.setText(count.toString());
                positiveNumbers.put(holder.uniqueKey,count);   //Key -> String.valueOf(position) and Value -> int count
            } 
        }); 

        return row;
    } 


     public Map<String,Integer> getPositiveNumbers()
     {
       return positiveNumbers;
     }


}

P.S。我在编辑器类型的,可能有一些编译时错误。您还可以将每一行的物件靠在键,以便当你正数,你可以得到任何其他的参考,如形象,我猜你会需要后显示!

p.s. I have typed in editor, there might be some compile time error. Also you can store objects of each row against the key so that when you get the positive count, you can get any other reference like the image, which I am guessing you would need to show later!

这篇关于在设置列表项的TextView文本按钮的点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆