Android 如何在listview中增减textview的值?

Android 如何在listview中增减textview的值?,android,Android,我制作了一个列表视图,每行有以下项目 图像图标 按钮 文本视图 按钮 文本视图 第三个文本视图位于两个按钮之间(按钮将增加和减少文本视图中显示的值)。当我增加和减少第一行文本视图的值,然后转到第二行时,当我增加和减少其值时,它将采用上一个值。 我正在使用一个计数器,并在单击按钮时按固定数量递增计数器 面临的问题: 我正在初始化计数器,但由于listview中有许多行,所以它将前一行的值作为第二行的初始值。如何刷新计数器值 如何将textview的初始值恢复为其原始值 我使用了适配器类 如何解决这

我制作了一个列表视图,每行有以下项目

  • 图像图标
  • 按钮
  • 文本视图
  • 按钮
  • 文本视图
  • 第三个文本视图位于两个按钮之间(按钮将增加和减少文本视图中显示的值)。当我增加和减少第一行文本视图的值,然后转到第二行时,当我增加和减少其值时,它将采用上一个值。 我正在使用一个计数器,并在单击按钮时按固定数量递增计数器

    面临的问题:

  • 我正在初始化计数器,但由于listview中有许多行,所以它将前一行的值作为第二行的初始值。如何刷新计数器值
  • 如何将textview的初始值恢复为其原始值
  • 我使用了适配器类

    如何解决这个问题,因为我是android新手。 告诉我怎么做

    这是我的适配器类:

    public class CartListViewAdapter extends BaseAdapter{
        private Context mcontext;
        private static int counter;
        private String stringVal;
        //private static int i = position;
    
        public CartListViewAdapter(Context c){
            mcontext = c;
    
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mThumbIds.length ;
        }
    
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
    
    
            View myView = convertView;
    
            //if (convertView == null) {  // if it's not recycled, initialize some attributes
            //Inflate the layout
    
            LayoutInflater inflater = (LayoutInflater)mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);           
            myView = inflater.inflate(R.layout.row, null);
    
    
            // Add The Image!!!           
            ImageView iv = (ImageView)myView.findViewById(R.id.image);
            iv.setImageResource(mThumbIds[position]);
    
    
            // Add The Text!!!
            TextView tv = (TextView)myView.findViewById(R.id.text);
            tv.setText(names[position] );
    
            final TextView tv1 = (TextView)myView.findViewById(R.id.text1);
            tv1.setText(names1[position]);
    
            TextView tv3 = (TextView)myView.findViewById(R.id.text3);
            tv3.setText(names3[position]);
    
    
    
            ImageButton button = (ImageButton)myView.findViewById(R.id.addbutton);
            button.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
    
    
                    //Toast.makeText(mcontext,"Button is clicked",Toast.LENGTH_SHORT).show();
    
                    //              counter+=250;
                    //              stringVal = Integer.toString(counter);
                    //              tv1.setText(stringVal);
    
                    for(int position=0;position<mThumbIds.length;position++){
    
    
                        counter = 250;
                        counter+=250;
                        stringVal = Integer.toString(counter);
                        tv1.setText(stringVal);
                    }
    
                }
            });
    
    
    
            ImageButton button2= (ImageButton)myView.findViewById(R.id.subbutton);
            button2.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
    
    
                    //Toast.makeText(mcontext,"Button is clicked",Toast.LENGTH_SHORT).show();
                    for(int position=0;position<mThumbIds.length;position++){
    
    
                        counter = 250;
                        counter-=250;
                        stringVal = Integer.toString(counter);
                        tv1.setText(stringVal);
    
    
                    }
    
                }
            });
    
    
    
            return myView;
        }
    
    
    
    
        private Integer[] mThumbIds = {
    
                R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher
        };
    
        private String[] names={"ab","cd","ef"};
    
        private String[] names1 = {"250","250","250"};
    
        private String[] names3 = {"yhhjd","hnbnn","fdffd"};
    
    
    }
    
    公共类CartListViewAdapter扩展了BaseAdapter{
    私有上下文;
    专用静态整数计数器;
    私有字符串stringVal;
    //专用静态int i=位置;
    公共CartListViewAdapter(上下文c){
    mcontext=c;
    }
    @凌驾
    public int getCount(){
    //TODO自动生成的方法存根
    返回mThumbIds.length;
    }
    @凌驾
    公共对象getItem(int位置){
    //TODO自动生成的方法存根
    返回位置;
    }
    @凌驾
    公共长getItemId(int位置){
    //TODO自动生成的方法存根
    返回位置;
    }
    @凌驾
    公共视图getView(int位置、视图转换视图、视图组父视图){
    //TODO自动生成的方法存根
    视图myView=convertView;
    //如果(convertView==null){//如果它没有被回收,初始化一些属性
    //使布局膨胀
    LayoutInflater充气器=(LayoutInflater)mcontext.getSystemService(Context.LAYOUT\u充气器\u服务);
    myView=充气机。充气(R.layout.row,空);
    //添加图片!!!
    ImageView iv=(ImageView)myView.findViewById(R.id.image);
    iv.setImageResource(mThumbIds[位置]);
    //添加文本!!!
    TextView tv=(TextView)myView.findViewById(R.id.text);
    tv.setText(名称[位置]);
    final TextView tv1=(TextView)myView.findviewbyd(R.id.text1);
    tv1.setText(名称1[位置]);
    TextView tv3=(TextView)myView.findViewById(R.id.text3);
    tv3.setText(名称3[位置]);
    ImageButton=(ImageButton)myView.findViewById(R.id.addbutton);
    setOnClickListener(新的OnClickListener(){
    @凌驾
    公共void onClick(视图v){
    //TODO自动生成的方法存根
    //Toast.makeText(mcontext,“点击按钮”,Toast.LENGTH_SHORT.show();
    //计数器+=250;
    //stringVal=整数。toString(计数器);
    //tv1.setText(stringVal);
    
    对于(int position=0;position是否要减少或增加每个textView的值?如果是

                for(int position=0;position<mThumbIds.length;position++){
    
                    counter = Integer.parseInt(tv1.getText());
                    counter-=250;
                    stringVal = Integer.toString(counter);
                    tv1.setText(stringVal);
                }
    

    对于(int position=0;position我想给出我的建议作为解决方案

    在处理列表视图项和更新列表视图项时,必须更新源值(即:arraylist)的内容

    更新arraylist中的值并通知适配器数据集已更改。如
    NotifyDataSetChanged()

    • 首先,在适配器setTag()中,指定执行onClick的列表视图项(即:textView)的位置
    • 然后,在onclick方法getTag()中输入位置,并从arrayList中获取相应的hashmap或对象作为arrayList.get(位置)
    • 然后用新值更新Hashmap或对象。并使用
      NotifyDataSetChanged()
    试试这个:

    CartListViewAdapter myAdapter = ((AdapterView)v.getParent()).getAdapter();
    for(int i=0;i<myAdapter.getCount();i++) {
        counter = Integer.parseInt(names1[i]);
        counter -= 250;
        names[i] = String.valueOf(counter);
    }
    myAdapter.notifiyDataSetChanged();
    
    CartListViewAdapter myAdapter=((AdapterView)v.getParent()).getAdapter();
    
    对于(int i=0;i请添加您各自的代码和布局。等等,您想只更新一个textView并保留其他textView的原始值吗?如果是这样,您不需要for loopNo,我想更新每一行。好的,还有一件事,您在哪里初始化mThumbIds?我已经获取了数组。根据它,行将递增。我在getcount()方法。是否需要初始化它?。实际上我不知道如何初始化,所以建议我。Daryn是对的,但这只会将同一行的值减少三倍。但是现在当我增加值时。它将增加750。我不希望这样。我只希望增加250。谢谢Daryn。当我删除for循环时,我得到了我想要的。thanks等待您的帮助:)Wait需要更新代码,因为它不是直接适配器的方法。我忘了您正在使用自己的适配器,请将该类而不是ArrayAdapter放在哪个资源找不到?可能是因为名称的性质1[]数组是私有的,所以您需要通过get/set方法访问/更改它。它表示未找到字符串资源。我不知道为什么会发生这种情况?
    CartListViewAdapter myAdapter = ((AdapterView)v.getParent()).getAdapter();
    for(int i=0;i<myAdapter.getCount();i++) {
        counter = Integer.parseInt(names1[i]);
        counter -= 250;
        names[i] = String.valueOf(counter);
    }
    myAdapter.notifiyDataSetChanged();