1 android listview listviewitem android-listview
我创建了一个列表视图,如下图所示.链接:
问题:我希望如果用户点击按钮+或-当前显示的文本视图0相应地增加或减少.但是,如果我单击第一个项目的按钮,则会在其他行中更新textview.我不知道如何实现这一点.
这是代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
请帮忙.此外,我需要帮助如何显示textview包含下一个活动或片段中的正数的项目.
我为我的答案写了一个简短的演示,你可以在这里看到.
例:

准备好后,您可以使用数据源(不是适配器,而不是列表视图)来查找数量> 0的产品.
public List<Product> getBasket() {
List<Product> basket = new ArrayList<>();
for (Product product : productList) {
if (product.quantity > 0) {
basket.add(product);
}
}
return basket;
}
Run Code Online (Sandbox Code Playgroud)
您的适配器有一个作业:创建/绑定视图到数据,它不需要做更多.
没有演示的初步答案:
如果直接更新项目视图,则以后将无法获取具有正数的所有项目,因为这些更新的值仅存储在视图中,而不存储在您可以迭代的某些数据结构中.
这就是为什么你不应该直接更新项目视图,而是在单击加号/减号按钮时使用回调,修改基础数据集,并adapter.notifyDatasetChanged()再次调用以更新ListView/RecyclerView.
将回调传递给适配器:
public interface ItemInteraction {
void onPlusButtonClick(long id);
void onMinusButtonClick(long id);
}
Run Code Online (Sandbox Code Playgroud)
您可以通过将其设置为相关视图上的单击侦听器的回调来使用它.ID可以是任何内容,只要它可以唯一标识列表视图行所代表的数据项即可.
final long id = item.getId();
plusButtonView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick() {
callback.onPlusButtonClick(id);
}
});
Run Code Online (Sandbox Code Playgroud)
一个例子,这种类似的问题,其中OP要显示或隐藏歌曲列表明星(表示喜欢)给出这里.
| 归档时间: |
|
| 查看次数: |
7427 次 |
| 最近记录: |