Listview не отвечает на OnItemClickListener после первых нескольких элементов

У меня есть список в моем приложении для Android, который показывает данные загрузки и анализа json. В этом списке OnItemClickListener не отвечает после первых пяти или шести элементов. Может ли кто-нибудь сказать мне, в чем моя проблема?

Вот мой код для просмотра списка:

mListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            try {                   
                String s = BookJsonParser.ids[arg2];
                String bookDetailUrl =  url + s;
                DownloadBookDetail downloadTaskbookDetail = new DownloadBookDetail();
                downloadTaskbookDetail.execute(bookDetailUrl);

            } catch (Exception e) {
                System.out.println(e.printStackTrace(););
            }
        }

    });

DownloadBookDetail — это асинхронная задача, где Json String загружается методом doInBackGround и открывает другую асинхронную задачу методом onPostExecute. Во втором asyncTask я анализирую json в методе doInBackground и загружаю список с помощью адаптера в методе onPostExecute. Второй код asyncTask:

    /** AsyncTask to parse json data and load ListView */
private class ListViewLoaderTask extends
        AsyncTask<String, Void, SimpleAdapter> {

    JSONObject jObject;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(BookActivity.this);
        pDialog.setMessage("Listing New Books...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    // Doing the parsing of xml data in a non-ui thread
    @Override
    protected SimpleAdapter doInBackground(String... strJson) {
        try {
            jObject = new JSONObject(strJson[0]);
            BookJsonParser countryJsonParser = new BookJsonParser();
            countryJsonParser.parse(jObject);
        } catch (Exception e) {
            Log.d("JSON Exception1", e.toString());
        }

        // Instantiating json parser class
        BookJsonParser countryJsonParser = new BookJsonParser();

        // A list object to store the parsed countries list
        List<HashMap<String, Object>> countries = null;

        try {
            // Getting the parsed data as a List construct
            countries = countryJsonParser.parse(jObject);
            System.out.println(countries.toString());
        } catch (Exception e) {
            Log.d("Exception", e.toString());
        }

        // Keys used in Hashmap
        String[] from = { "country", "flag", "author" };

        // Ids of views in listview_layout
        int[] to = { R.id.tv_bookName, R.id.list_image, R.id.tv_bookAuthor };

        // /////////
        /*
         * for (int i = 0; i < BookJsonParser.ids.length; i++) {
         * System.out.println(BookJsonParser.ids[i]); }
         */

        // Instantiating an adapter to store each items
        // R.layout.listview_layout defines the layout of each item
        SimpleAdapter adapter = new SimpleAdapter(getBaseContext(),
                countries, R.layout.item_lv_layout, from, to);

        return adapter;
    }

person Fahim Ahmed    schedule 20.02.2013    source источник


Ответы (2)


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

android:descendantFocusability="blocksDescendants"

person RobinHood    schedule 20.02.2013

RobinHood, спасибо за ответ, он мне помогает.

В моем случае я использовал пользовательский вид для ContactsCursorAdapter with Button. Если кнопка невидима или исчезла - все работает нормально, но если я установил ее как видимую, то setOnItemClickListener в ListView не работал.

person Vlad Yarovyi    schedule 08.07.2013
comment
Ответ Robinhoods исправил это и для меня. - person Theo; 08.11.2013