我有一个ListView,每行都有一些项目。其中一个项目是ImageView可点击。我创建了一个单独的Adapter类来创建ListView并用所有项填充它。
在我的Activity中,我设置了此适配器,如下所示:
//myScenesArray is the array of items I want to fill in the Adapter
ListView listView = (ListView) findViewById(R.id.sceneslistview);
ListViewScenesAdapter customListAdapter = new ListViewScenesAdapter(this.getBaseContext(), R.layout.scenesrow, myScenesArray);
listView.setAdapter(customListAdapter);
我可以为每一行创建一个Listener,如下所示:
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
//here I put what I want to do when Listener is activated
});
但是如何为行内的项目创建一个监听器?
我只访问适配器中我的行的项目...查看下面的代码,我的适配器的方法getView(),当我填充所有元素时:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i("ADAPTER DE CENAS","ENTROU NO getView()!!!");
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(layoutResourceId, parent, false);
ImageView left = (ImageView)row.findViewById(R.id.left);
left.setImageBitmap( (data.get(position)).getVisualImage() );
TextView middle = (TextView)row.findViewById(R.id.text);
middle.setText( (data.get(position)).getVisualName() );
View right = row.findViewById(R.id.right);
right.setTag(position);
return row;
}
我可以访问Activity中每行的元素吗?
我想在每一行中为一个名为right(R.id.right)的View设置一个Listener。我感谢任何帮助。
更新
我已将上下文作为Adapter类的变量。我将发布Adapter类的开头:
public class ListViewScenesAdapter extends ArrayAdapter<Scene> {
Context context;
int layoutResourceId;
ArrayList<Scene> data = new ArrayList<Scene>();
public ListViewScenesAdapter(Context context, int layoutResourceId, ArrayList<Scene> data) {
super(context, layoutResourceId, data);
Log.i("ADAPTER DE CENAS","ENTROU NO CONSTRUTOR!!!");
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
Adapter类具有上面的构造函数,已经提到的getView方法和变量:context,layoutResourceId和data。
但我不知道如何在Adapter类中执行监听器。任何人都可以帮助我吗?
答案 0 :(得分:2)
将侦听器设置为适配器的ImageView
方法中的getView
。如果需要访问活动中的任何变量,只需将它们作为参数传递给适配器构造函数即可。
// This will set separate listeners to all of the right views.
right.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do whatever you want here, you can use the position variable to handle current view specifically
data.get(position); // this is the data you have in this listView item
}
);
答案 1 :(得分:2)
在getView()
中使用它holder.imgIcon.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"ImageClick"+position, Toast.LENGTH_LONG).show();
}
});
答案 2 :(得分:1)
您应该可以在getView
中完成。
如果您需要访问上下文中的任何信息,您只需在Context
的构造函数中传递Adapter
并从中获取任何信息。
你可以这样做:
right.setOnClickListener(new OnClickListener(){
public void onClick(View view){
Toast.makeText(context,"You clicked image " + position,Toast.LENGTH_LONG).show();
}
}