Добавление onclicklistener в просмотр списка (Android) - PullRequest
27 голосов
/ 01 февраля 2012

Мне удалось реализовать отличный просмотр списка, который я нашел здесь http://www.learn -android.com / 2011/11/22 / lots-of-lists-custom-adapter / comment-page-1 / но я не могу добавить onclicklistener. Я просто хочу иметь возможность выполнять действие, когда я щелкаю по строке, с данными, которые содержит строка, конечно, есть идеи?спасибо

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.liste);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    // Setup the list view
    final ListView prestListView = (ListView) findViewById(R.id.list);
    final prestationAdapterEco prestationAdapterEco = new prestationAdapterEco(this, R.layout.prestation);

    prestListView.setAdapter(prestationAdapterEco);

    // Populate the list, through the adapter
    for(final prestationEco entry : getPrestations()) {
        prestationAdapterEco.add(entry);
    }
    prestListView.setClickable(true);
    prestListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
            Object o = prestListView.getItemAtPosition(position);
            String str=(String)o;//As you are using Default String Adapter
            Toast.makeText(getApplicationContext(),str,Toast.LENGTH_SHORT).show();
        }
    });
}

Ответы [ 6 ]

53 голосов
/ 01 февраля 2012
listView.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Object o = prestListView.getItemAtPosition(position);
        prestationEco str = (prestationEco)o; //As you are using Default String Adapter
        Toast.makeText(getBaseContext(),str.getTitle(),Toast.LENGTH_SHORT).show();
    }
});
8 голосов
/ 01 февраля 2012

Если ваша активность расширяет ListActivity, вы можете просто переопределить метод OnListItemClick() следующим образом:

/** {@inheritDoc} */
@Override  
protected void onListItemClick(ListView l, View v, int pos, long id) {  
    super.onListItemClick(l, v, pos, id);

    // TODO : Logic
}  
1 голос
/ 11 ноября 2013
list.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });
0 голосов
/ 21 ноября 2016

Попробуйте это:

    list.setOnItemSelectedListener(new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1,
            int arg2, long arg3)
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {

    }
});
0 голосов
/ 01 февраля 2012

Вы делаете

Object o = prestListView.getItemAtPosition(position);
String str=(String)o;//As you are using Default String Adapter

Возвращаемое o это не строка, а prestationEco, поэтому вы получаете CCE при выполнении (String)o

0 голосов
/ 01 февраля 2012

prestListView.getItemAtPosition (position);возвращает виджет пользовательского интерфейса: Text, Icon, ...

Попробуйте вместо этого:

Object o = prestationAdapterEco.getItemAtPosition(position);

или

Object o = arg0.getItemAtPosition(position);

Получить объект из адаптера.Не из списка.

2.Объект o является объектом prestationEco.Не строка.

...