2

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

  1. 图像图标。
  2. 按钮。
  3. 文本视图
  4. 按钮。
  5. 文本视图。

第三个 textview 在两个按钮之间(按钮将增加和减少 textview 中显示的值)。当我增加和减少第一行的 textview 的值然后我转到第二行时,当我增加时它会采用前一个值并降低其价值。我正在使用计数器并在单击按钮时将计数器增加固定数量。

面临的问题:

  1. 我正在初始化计数器,但由于列表视图中有很多行,因此它将前一个值作为第二行的初始值。如何刷新计数器值?
  2. 如何将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"};


}

这是我的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center_horizontal"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:orientation="vertical"
        android:padding="10sp" >

        <ImageView
            android:id="@+id/image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />

        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10sp" />
    </LinearLayout>

    <ImageButton
        android:id="@+id/addbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="50sp"
        android:layout_marginTop="20sp"
        android:background="@android:color/background_light"
        android:src="@android:drawable/ic_input_add" />

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="3sp"
        android:layout_marginTop="20sp" />

    <ImageButton
        android:id="@+id/subbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20sp"
        android:background="@android:color/background_light"
        android:src="@android:drawable/ic_input_add" />

    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10sp"
        android:layout_marginTop="20sp"
        android:layout_weight="0.3"
        android:gravity="right" />

</LinearLayout>

谢谢。

4

3 回答 3

1

你想减少还是增加每个 textView 的值?如果是

            for(int position=0;position<mThumbIds.length;position++){

                counter = Integer.parseInt(tv1.getText());
                counter-=250;
                stringVal = Integer.toString(counter);
                tv1.setText(stringVal);
            }
于 2013-10-28T08:03:44.880 回答
1

尝试这个:

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();

我相信这会起作用,尽管准备好修复一些代码。

于 2013-10-28T08:11:28.647 回答
0

我想提出我的建议作为解决方案。

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

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

  • 首先,在适配器 setTag() 中,您执行 onClick 的列表视图项(即:textView)的位置。
  • 然后,在 onclick 方法中 getTag() 的位置并从 arrayList 中获取相应的哈希图或对象作为 arrayList.get(position);
  • 然后使用新值更新 Hashmap 或对象。并使用NotifyDataSetChanged()
于 2013-10-28T08:06:17.727 回答