#android #android-listview
#Android #android-listview
Вопрос:
Я новичок в 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()
; это аргумент?
Может ли кто-нибудь помочь мне понять это?
Ответ №1:
Что делает этот код, так это реализует новый встроенный OnItemClickListener. Интерфейс OnItemClickListener — это, по сути, контракт, в котором говорится, что объект будет предоставлять реализацию функции onItemClick(….). Позже, когда будет нажат элемент в вашем списке, будет вызвана функция onItemClick и будут переданы AdapterView (то, что создает экземпляры строк списка и управляет ими), view — (код рендеринга для определенной строки), position (позиция в списке) и свойство id, которое я никогда не использую, чтобы вы могли посмотреть, для чего это нужно.
Подобный встроенный код всегда выглядит странно для меня. Есть пара других способов написать это, которые, я думаю, имеют более интуитивный смысл. Просто имейте в виду, что вы пишете некоторый код, который будет выполняться при нажатии на строку в вашем списке.
1 — Вы можете реализовать свою активность в 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 экземпляр представления.Класс OnItemClickListener, который будет иметь функцию onItemClick, вызываемую при нажатии на строку в списке.