访问自定义ListAdpater事件内的对象单击

时间:2014-01-08 18:17:21

标签: java android listadapter

我有ListAdapter的这个实现:

public class TaskAdapter implements ListAdapter, View.OnClickListener {

Context                 context;

List<Task>              tasks;

// View adapterView;
public TaskAdapter(Context context, List<Task> tasks) {
    super();
    this.context = context;
    this.tasks = tasks;
} ...

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    Task data = tasks.get(position);
    Button task_menu_bt = (Button)root.findViewById(R.id.taskMenuButton);

        task_menu_bt.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                **//     How to access current Task data??  i can not do tasks.get(position)**
            }
        });

}

我的问题是如何在项目行中的按钮上访问onClick事件内的任务数据(不是视图点击而是列表视图上的按钮)?

我的任务类包含exmaple getName()方法和其他...

2 个答案:

答案 0 :(得分:0)

您应该能够通过将Task的实例化更改为

来访问数据
final Task data = tasks.get(position);

答案 1 :(得分:0)

由于您将onClickListener的工具用作内部类,因此该变量在其中不可访问。 因此,您应该在适配器级别声明一个Task变量,基本上是TaskAdapter的成员,或者如果它可以工作则使其成为最终

    public class TaskAdapter implements ListAdapter, View.OnClickListener {

Context                 context;

List<Task>              tasks;
Task data;

// View adapterView;
public TaskAdapter(Context context, List<Task> tasks) {
    super();
    this.context = context;
    this.tasks = tasks;
} ...



@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    data = tasks.get(position);
    Button task_menu_bt = (Button)root.findViewById(R.id.taskMenuButton);

        task_menu_bt.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                **//     How to access current Task data??  i can not do tasks.get(position)**
            }
        });

final Task data = tasks.get(position);

访问项目的更好方法之一是覆盖getItem方法并从那里返回数据源中的对象。

public Object getItem (int position){
    return (Task)tasks.get(position);
}