问题描述
我是用POJO类填充一个ArrayAdapter。列表视图包括2布局。 1为菜单项,另一个是为类别。与分离器的列表视图是好的。
I have a ArrayAdapter which is populated using a POJO class. The listview comprises of 2 layout. 1 is for a menuitem and one is for the category. The Listview with seperator is fine.
后来我想添加的每个菜单项行中的按钮进行编辑的详细信息。在这里,我有一个问题,当我试图让按钮被点击所在行的位置。
Later I tried to add a button in each menuitem row to edit the details in it. Here I have a problem when I tried to get the position of the row where the button is clicked.
我试图显示使用日志的位置。 1.如果行数少,也没有必要进行滚动。该日志显示了正确的位置。 2.如果我有运行到网页更行,然后在我的日志中的位置不正确。
I tried to display the position using the log. 1. If there is less number of rows and there is no need to scroll. the the log shows the correct position. 2. If i have more rows running into pages then the position in my log is not correct.
能否请你的GUID我在我的code需要更正行了?在此先感谢
Could you please guid me to the line where my code needs correction ?Thanks in Advance
public class ConfirmAdapter extends ArrayAdapter<POJO_ConfirmMenu> {
private ArrayList<POJO_ConfirmMenu> ticketItem;
Context context;
LayoutInflater vi;
public ConfirmAdapter(Context context ,ArrayList<POJO_ConfirmMenu> menu) {
super(context, 0, menu );
this.ticketItem = new ArrayList<POJO_ConfirmMenu>();
this.ticketItem.addAll(menu);
this.context =context;
vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private class ViewHolder {
TextView ticketItem;
TextView type;
TextView quantity;
Button cancel,edit;
}
public boolean isEnabled(int position) {
if (ticketItem.get(position).getItemType().equals("menucategory"))
return false;
return true;
}
public int getItemViewType(int position) {
if (ticketItem.get(position).getItemType().equals("menucategory"))
return 0;
return 1;
}
public int getViewTypeCount() {
return 2;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case 0:
convertView = vi.inflate(R.layout.group, null);
holder.ticketItem = (TextView) convertView.findViewById(R.id.tvGroup);
convertView.setBackgroundColor(Color.RED);
break;
case 1:
convertView = vi.inflate(R.layout.confirmitem, null);
holder.ticketItem = (TextView) convertView.findViewById(R.id.tvConfirmItem);
holder.quantity = (TextView) convertView.findViewById(R.id.tvQuantity);
holder.cancel = (Button) convertView.findViewById(R.id.bCancel);
holder.edit = (Button) convertView.findViewById(R.id.bEdit);
holder.edit.setTag(position);
// Edit button
holder.edit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int pos = (Integer) v.getTag();
Log.i("ConfirmAdapter ","Order Edit @ position : " + pos);
}
});
break;
} convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
switch (type) {
case 0:
holder.ticketItem.setText(ticketItem.get(position).getTicketItemObject().getCategoryName()) ;
convertView.setBackgroundColor(Color.RED);
break;
case 1:
holder.ticketItem.setText(ticketItem.get(position).getTicketItemObject().getName());
holder.quantity.setText(Integer.toString(ticketItem.get(position).getTicketItemObject().getItemCount()));
break;
}
return convertView;
}
}
}
推荐答案
在 getView()
方法,你必须设置标签的按钮,当你点击按钮获取在整型标签,它会回报你纠正你的按钮点击位置,像下面。
Within getView()
method you have to set tag to your button and when you click on button get the tag within integer, it will return you correct position of your button click, something like below.
else {
holder = (ViewHolder) convertView.getTag();
}
holder.edit.setTag(position); //to get the orignal position later in onClick() of button
holder.edit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int pos = (Integer) v.getTag(); //the real and updated position
Log.i("ConfirmAdapter ","Order Edit @ position : " + pos);
}
});
更新
注:获取转换视图标签后,标签设置为您的按钮和手柄点击甚至过于
Note: after getting convert-view tag, set the tag to your button and handle click even too.
What是setTag()getTag()查看方法?的主要目的
这篇关于使用ArrayAdapter按钮的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!