我正在创建联系人列表视图,diplaying用户名,用户电子邮件和用户ID。现在,当点击特定项目时,我想根据用户ID将一些事件发布到服务器。如何在onClickItem侦听器中获取用户标识,因为用户标识为long值。我能够获得用户名,这意味着文本而不是用户ID。
答案 0 :(得分:1)
listView具有onCLicklistener,它具有参数position.If你使用arrayList来膨胀ListView然后你可以使用这个位置来获取相应的对象。
答案 1 :(得分:0)
您可以尝试使用View.setTag
和View.getTag
将用户ID设置为代码。有两个版本可供选择您需要的版本。这样,您可以将用户ID作为标记附加,然后将其恢复。
http://developer.android.com/reference/android/view/View.html#setTag(int,java.lang.Object)
您的代码应如下所示:
view.setTag(Long.valueOf(id));
.....
onClickListener(..) {
Long id = (Long)view.getTag();
}
答案 2 :(得分:0)
您应该创建自己的包含userid的bean类,并将其放在List(或ArrayList)
中然后通过创建一个扩展ArrayAdapter(例如)的类来创建一个适配器来绑定这个bean类的列表
如果您自定义布局,请使用onItemClickListener或View中的侦听器注册侦听器。
获取位置并使用它来检索bean列表中的用户ID。
这是我的代码段
public class ListActivity extends Activity implements OnItemClickListener {
private Context context;
private RowAdapter adapter;
private ArrayList<Row> rowList = new ArrayList<Row>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = ListActivity.this;
initRows();
adapter = new RowAdapter(context, rowList);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
}
private void initRows() {
Row row = new Row(1);
rowList.add(row);
row = new Row(2);
rowList.add(row);
}
public class Row {
long userid = 0;
public Row(long userid) {
this.userid = userid;
}
public long getUserid() {
return userid;
}
public void setUserid(long userid) {
this.userid = userid;
}
}
public class RowAdapter extends ArrayAdapter<Row> {
private Context context;
public RowAdapter(Context context, ArrayList<Row> bindList) {
super(context, R.layout.row_layout, bindList);
this.context = context;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if(view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.row_layout, null);
}
//if you use some additional View you can retrieve your position using this
Button button = view.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateSelected(position);
}
});
return view;
}
}
//or if you rather just listen on row click then you can retrieve your position using this
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
updateSelected(position);
}
private void updateSelected(int position) {
rowList.get(position).getUserid();
//have it your way
}
}