自定义onClick项侦听器 - ListActivity

时间:2011-12-14 07:32:28

标签: android

我正在创建联系人列表视图,diplaying用户名,用户电子邮件和用户ID。现在,当点击特定项目时,我想根据用户ID将一些事件发布到服务器。如何在onClickItem侦听器中获取用户标识,因为用户标识为long值。我能够获得用户名,这意味着文本而不是用户ID。

3 个答案:

答案 0 :(得分:1)

listView具有onCLicklistener,它具有参数position.If你使用arrayList来膨胀ListView然后你可以使用这个位置来获取相应的对象。

答案 1 :(得分:0)

您可以尝试使用View.setTagView.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
}

}