2014-01-08 31 views
0

我有這個實現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事件中訪問坐落在一個按鈕任務數據項目行(不是視圖點擊,而是列表視圖上的按鈕)?

我的任務類包含〔實施例的getName()方法和其他...

+0

你應該看看[OnItemClickListener](http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html)。 – tolgap

+0

爲什麼不能在那裏使用'task.get(position)'? – tyczj

+0

@tyczj「不能引用在一個不同的方法中定義的內部類中的非最終變量數據」 –

回答

0

由於您使用onClickListener的作爲一個內部類來實現,變量將不可訪問它。 所以您應該在適配器級別聲明一個任務變量,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); 
} 
0

您應該能夠通過更改任務的實例來訪問數據

final Task data = tasks.get(position);