Android OnItemClickListener в списке не работает - PullRequest
2 голосов
/ 20 апреля 2011

Я сделал операцию с вкладками, которая прекрасно работает, когда я нажимаю на конкретную вкладку, расширяю активность списка и также получаю представление списка, но я не могу сделать элементы в списке активными. код:

package com.infra.android.views;

import java.util.ArrayList;
import java.util.HashMap;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class TopNewsActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listplaceholder);

        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();


        String xml = XMLfunctions.getTopNewsXML();
        Document doc = XMLfunctions.XMLfromString(xml);

        int numResults = XMLfunctions.numResults(doc);

        if((numResults <= 0)){
            Toast.makeText(TopNewsActivity.this, "No Result Found", Toast.LENGTH_LONG).show();  
            finish();
        }

        NodeList nodes = doc.getElementsByTagName("result");

        for (int i = 0; i < nodes.getLength(); i++) {                           
            HashMap<String, String> map = new HashMap<String, String>();    

            Element e = (Element)nodes.item(i);
            map.put("id", XMLfunctions.getValue(e, "id"));
            map.put("title", XMLfunctions.getValue(e, "title"));
            mylist.add(map);            
        }       

        ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, new String[] { "title"}, new int[] { R.id.item_title});

        setListAdapter(adapter);

        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                @SuppressWarnings("unchecked")
                HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
                Toast.makeText(TopNewsActivity.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_LONG).show(); 

            }
        });
    }
}

когда я нажимаю на элемент, он, вероятно, должен дать идентификатор выбранного элемента, но он не работает.

Ответы [ 6 ]

5 голосов
/ 20 апреля 2011

Для ListView,

ListView lv = (ListView) findViewById(R.id.ContainlistItems);
lv.setItemsCanFocus(false);

и в XML-файле убедитесь, что для Textview внутри элемента списка установлено фокусируемое значение false

android:focusable="false"
android:focusableInTouchMode="false"
3 голосов
/ 20 апреля 2011

вы можете использовать

@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
    }
1 голос
/ 20 апреля 2011

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

     lvlList = (ListView)findViewById(R.id.lvlList);
lvlList.setOnItemClickListener(new OnItemClickListener() 
{
    @Override
    public void onItemClick(AdapterView<?> a, View v,int position, long id) 
    {
        Toast.makeText(getBaseContext(), "Click", Toast.LENGTH_LONG).show();


    }
});

Вы пропустили @Override.

0 голосов
/ 09 января 2013

Я боролся с этим некоторое время, прежде чем понял, что areAllItemsEnabled и isEnabled в моем костюме ListAdapter, где установлено значение false.

0 голосов
/ 28 апреля 2011

Проблема в том, что в вашем адаптере вы раздуваете основной макет для каждого элемента списка.Это должно быть изменено на макет торговца предметами.

Поскольку у вас уже есть решение для этого вопроса здесь , вы должны пометить его как решенный, приняв любой из этих ответов или ответив самостоятельнос вышеуказанной ссылкой.

0 голосов
/ 20 апреля 2011

В андроиде есть проблемы с отображением диалогов и тостов в субактивности, поэтому ваш код должен работать нормально, но чтобы тост попробовал это:

Toast.makeText(TopNewsActivity.this.getParent(), "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_LONG).show(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...