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