2013-02-20 1 views
0

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

Вот мой код ListView:

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 является AsyncTask где Json Строка загрузки в это метод doInBackGround & он открывает еще один AsyncTask в этом onPostExecute метод. Во второй asyncTask, я разбираю json в doInBackground метод &, загружая listview с помощью адаптера в методе 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; 
    } 

ответ

4

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

android:descendantFocusability="blocksDescendants"

0

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

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

+0

Robinhoods ответ исправил его для меня тоже. – Theo