我已经编码了一段时间,但是我从未上过任何课程,所以我对某些事情的工作方式有一些疑问。其中之一是onClick侦听器。我有一个关于onClick事件的问题,更确切地说是onItemClick事件。
假设我有一个简单的listView,并且想要处理onItemClick事件,我会得到类似以下内容:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)findViewById(R.id.listView);
String parameter = "123";
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = parent.getItemAtPosition(position).toString();
// TODO1
}
}
// TODO2
有没有办法传递'item'的值,以便我可以在'TODO2'中使用它?
另外,如果我在TODO1中需要做一些事情并且需要'parameter'变量,是否可以将其传递给onItemClick方法?
谢谢!
最佳答案
1)新的AdapterView.OnItemClickListener是一个匿名内部类。它可能会使用周围课程的字段
2)参数必须定义为“最终”变量。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)findViewById(R.id.listView);
String final parameter = "123"; //<--
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
item = parent.getItemAtPosition(position).toString(); //<--
// TODO1
System.out.println(parameter)
}
}
// TODO2
private String item = null;
public String getLastClickedItem(){
return item;
}