Android的 - 从列表项无法递增或递减值 [英] Android - Unable to increment or decrement value from list item
问题描述
大家好我正在使用自定义列表视图在列表视图正从服务器和数据显示..我能够获取数据并显示在列表视图但我不知道实行按钮里面listitem Click事件。有两个按钮increement和递减数量。我clicklistener是工作,但它不是以正确的方式工作。请帮我纠正这个问题。我做了搜索在堆栈溢出太多postrs,但无法理解它...
Hi everyone i am using custom listview for getting data from server and show in listview.. I am able to get data and show it in listview but i dont know to implement the click event of button inside listitem. There are two buttons to increement and decrement qty. My clicklistener is working but its not working in right manner. Please help me correcting this issue. I did search too many postrs in stack overflow but was unable to understand it...
下面是我的适配器类
private Activity activity;
private LayoutInflater inflater;
private List<FeedItem> feedItems;
private List<FeedItem> filteredfeedItems;
ImageView plus;
ImageView minus;
int qty = 0;
String result;
String formattedDate;
int id;
public FeedListAdapter(Activity activity, List<FeedItem> feedItems) {
this.activity = activity;
this.feedItems = feedItems;
this.filteredfeedItems = feedItems;
}
@Override
public int getCount() {
return filteredfeedItems.size();
}
@Override
public Object getItem(int position) {
return filteredfeedItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.feed_item, null);
FeedItem item = filteredfeedItems.get(position);
id = item.getId();
convertView.setTag(Integer.valueOf(id));
TextView date = (TextView) convertView.findViewById(R.id.name);
TextView initiator = (TextView) convertView
.findViewById(R.id.timestamp4);
TextView assignTo = (TextView) convertView.findViewById(R.id.timestamp);
final TextView location = (TextView) convertView.findViewById(R.id.timestamp2);
//TextView category = (TextView) convertView.findViewById(R.id.category);
data.setText(item.getData();
price
.setText(item.getPrice());
description.setText(item.getDescription());
plus = (ImageView) convertView.findViewById(R.id.btnAddToCart1);
plus.setTag(item.getId());
plus.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
int position = (Integer) view.getTag();
//convertView.setTag(Integer.valueOf(id));
FeedItem item = filteredfeedItems.get(position);
item.quantity++;
location.setText(String.valueOf(item.quantity));
}
});
minus = (ImageView) convertView.findViewById(R.id.btnAddToCart5);
minus.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Integer taggedPosition = (Integer) view.getTag();
if (qty>0){
//minus.setImageResource(R.drawable.minus_pressed);
qty--;
location.setText(String.valueOf(qty));
}
else{
qty = 0;
}
}
});
return convertView;
}
这是我的FeedItem类:
This is my FeedItem class:
public class FeedItem {
int quantity = 0;
int id;
public FeedItem(int id,int quantity){
super();
this.id = id;
this.quantity = quantity;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
推荐答案
最后我解决我的回答我自己。只需要实现界面和片段级呼叫。
Finally i solved my answer my self. Just need to implement interface and call in fragment class..
更新适配器类
public class FeedListAdapter extends RecyclerView.Adapter<FeedListAdapter.ViewHolder> {
private Activity activity;
private LayoutInflater inflater;
private List<FeedItem> feedItems;
private List<FeedItem> filteredfeedItems;
ImageView plus;
ImageView minus;
String result;
String formattedDate;
int id;
private View.OnClickListener onAddNum;
private View.OnClickListener onSubNum;
public FeedListAdapter(Activity activity, List<FeedItem> feedItems)
{ this.activity = activity;
this.feedItems = feedItems;
this.filteredfeedItems = feedItems;
inflater = ( LayoutInflater )activity.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
// create interface method
public void setOnAddNum(View.OnClickListener onAddNum){
this.onAddNum = onAddNum;
}
public void setOnSubNum(View.OnClickListener onSubNum){
this.onSubNum = onSubNum;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.feed_item, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
FeedItem item =(FeedItem)filteredfeedItems.get(position);
holder.date.setText(item.getObservation());
holder.initiator
.setText(item.getObservation());
holder.location.setText(String.valueOf(item.getNum())+"");
holder.assignTo.setText(item.getSummary());
// set tag to know which button you clicked'
holder.plus.setTag(position);
holder.plus.setFocusable(true);
holder.plus.setClickable(true);
// set callback interface ,
holder.plus.setOnClickListener(onAddNum);
holder.minus.setTag(position);
holder.minus.setOnClickListener(onSubNum);
}
@Override
public int getItemCount() {
return filteredfeedItems.size();
}
public long getItemId(int position) {
return position;
}
class ViewHolder extends RecyclerView.ViewHolder{
ImageView plus;
ImageView minus;
TextView date;
TextView initiator;
TextView assignTo;
TextView location;
public ViewHolder(View vi) {
super(vi);
date = (TextView) vi.findViewById(R.id.name);
initiator = (TextView) vi
.findViewById(R.id.timestamp4);
assignTo = (TextView) vi.findViewById(R.id.timestamp);
location = (TextView) vi.findViewById(R.id.timestamp2);
plus = (ImageView) vi.findViewById(R.id.btnAddToCart1);
minus = (ImageView) vi.findViewById(R.id.btnAddToCart5);
}
}
}
现在活动课实施View.OnClickListener按钮事件。
now in activity class implement View.OnClickListener for button events.
public class MyFragment extends Fragment implements View.OnClickListener
@Override
public void onClick(View view) {
Object tag = view.getTag();
switch (view.getId()){
case R.id.item_btn_add: // click add buttons number , performs corresponding processing
if (tag != null && tag instanceof Integer) {
int position = (Integer) tag;
Your pojo class
int num =feedItems.get(position).getNum();
num++;
feedItems.get(position).setNum(num);
adapter.notifyDataSetChanged();
}
break;
case R.id.btnAddToCart5:
if (tag != null && tag instanceof Integer) {
int position = (Integer) tag;
int num =feedItems.get(position).getNum();
if (num>0) {
num--;
feedItems.get(position).setNum(num);
listAdapter.notifyDataSetChanged();
}
else{
num= 0;
listAdapter.notifyDataSetChanged();
}
}
break;
}
享受编码
这篇关于Android的 - 从列表项无法递增或递减值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!