我是Android的新手,现在我正在学习ListView
。
当我看到这段代码时,我正在阅读bogotobogo.com上的教程:
ListView lv = getListView();
lv.setTextFilterEnabled(true);
*** lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) v).getText(),
Toast.LENGTH_SHORT).show();
}
}); ***
我无法理解来自lv.setOnItemClickListener(new OnItemClickListener()
的代码;这是一个争论吗?
有人可以帮我理解吗?
答案 0 :(得分:1)
该代码正在执行的是内联实现新的OnItemClickListener。 OnItemClickListener接口基本上是一个契约,它表示对象将提供函数onItemClick(....)的实现。稍后,当单击列表中的项目时,将调用onItemClick函数和AdapterView(实例化和管理列表行的事物,视图 - (特定行的呈现代码),位置(位置)列表)和一个我从不使用的id属性,所以你可以查找传递的内容。
像这样的内联代码对我来说总是很奇怪。还有其他一些写这个的方法我认为更直观。请记住,您正在做的是编写一些代码,以便在单击列表中的行时执行。1 - 您可以让您的Activity实现OnItemClickListener
public class SomeActivity extends Activity implements OnItemClickListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourview);
ListView lv = (ListView)findViewById(R.id.listView);
lv.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
//Your toast code goes in here
}
}
在这段代码中,您的主类实现了OnItemClickListener接口,因此setOnItemClickListener将主类(this)视为OnItemClickListener的一个实例。单击列表中的行时,将调用onItemClick函数。
您也可以2 - 让您的点击监听器来自内部类。
public class SomeActivity extends Activity implements OnItemClickListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourview);
ListView lv = (ListView)findViewById(R.id.listView);
lv.setOnItemClickListener(new YourInternalClass());
}
class YourInternalClass implements View.OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
//Your toast code goes in here
}
}
}
实际上所有三种方法都在做同样的事情:为setOnItemClickListener提供一个View.OnItemClickListener类的实例,该类将在单击列表中的行时调用onItemClick函数。