单击按钮在列表项的文本视图中设置文本 [英] set text in textview of a list item on click of button
问题描述
我已经创建了一个列表视图,如图所示.链接:
I have created a list view as shown in this image.Link:
问题:我希望如果用户点击按钮 +
或 -
当前显示 0
相应地增加或减少.但是,如果我单击第一个项目的按钮,则文本视图会在其他行中更新.我不知道如何实现这一点.
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.
代码如下:
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(position) 而值是 count 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).
(position = 0, count = 0) --> - 单击第 0 行--> (position 0, count = -1) 将覆盖 key = 0 单元格.
(position = 0, count = 0) --> - clicked on 0th row--> (position 0 , count = -1) will be overriden on key = 0 cell.
完整代码(带有数字增量修复并在 DataStructure 中具有一组正值):
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. 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!
这篇关于单击按钮在列表项的文本视图中设置文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!