о коде ListView

#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, вызываемую при нажатии на строку в списке.