о коде ListView - PullRequest
       9

о коде ListView

2 голосов
/ 17 мая 2011

Я новичок в 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 Ответ

1 голос
/ 17 мая 2011

То, что делает этот код, реализует новый встроенный 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 при нажатии на строку в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...