2012-11-27 43 views
2

我有一个自定义listView.xml有一个listView as。onItemClicklistner();不工作自定义listView在android

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@null" > 

    <ListView 
     android:id="@+id/searchList" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/txtSearchFor" 
     android:background="@color/Black" > 
    </ListView> 

</RelativeLayout> 

此列表视图包含一个ImageView的,2个TextViews和的RatingBar(item_list.XML)如下面给出的。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <RelativeLayout 
     android:id="@+id/rel_SearchLayout01" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 

     <ImageView 
      android:id="@+id/img_searchBookCoverPhoto" 
      android:layout_width="70dp" 
      android:layout_height="100dp" 
      android:layout_margin="5dp" 
      android:background="@drawable/rounded_image_borders" 
      android:focusable="false" 
      android:src="@drawable/book1" /> 

     <TextView 
      android:id="@+id/txt_searchBookTitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignTop="@+id/img_searchBookCoverPhoto" 
      android:layout_marginTop="10dp" 
      android:layout_toRightOf="@+id/img_searchBookCoverPhoto" 
      android:focusable="false" 
      android:text="The Basic Doctrine Of Islam" 
      android:textColor="@color/White" 
      android:textSize="16sp" /> 

     <TextView 
      android:id="@+id/txt_searchAutherName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/txt_searchBookTitle" 
      android:layout_marginTop="2dp" 
      android:layout_toRightOf="@+id/img_searchBookCoverPhoto" 
      android:focusable="false" 
      android:text="By: Andrew J Newman" 
      android:textColor="@color/SkyBlue" 
      android:textSize="14sp" /> 

     <RatingBar 
      android:id="@+id/searchRatingbar" 
      style="?android:attr/ratingBarStyleSmall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/txt_searchAutherName" 
      android:layout_marginTop="12dp" 
      android:layout_toRightOf="@+id/img_searchBookCoverPhoto" 
      android:focusable="false" 
      android:isIndicator="false" 
      android:numStars="5" 
      android:rating="5" 
      android:stepSize="1" /> 
    </RelativeLayout> 

</RelativeLayout> 
  • 我的问题是,我有列表视图click事件如下图所示

enter image description here

,但其没有工作,我真的感到惊讶,为什么发生这种情况

正如你所看到的,我也设置了这个

android:focusable="false" 

适用于我的自定义listView中的所有视图。

这里也是自定义适配器的代码。

public class BookSearchResultActivity extends Activity { 

    static final String URL = "http://www.shiaislamiclibrary.com/requesthandler.ashx"; 
    static final String KEY_ITEM = "Book"; // parent node 
    static final String KEY_BOOKAUTHOR = "BookAuthor"; 
    static final String KEY_BOOKTITLE = "BookTitle"; 
    static final String KEY_BOOKCODE = "BookCode"; 
    static final String KEY_BOOKIMAGE = "BookImage"; 

    ArrayList<String> BookTitle = new ArrayList<String>(); 
    ArrayList<String> BookCoverPhotos = new ArrayList<String>(); 
    ArrayList<String> BookAuther = new ArrayList<String>(); 
    ArrayList<String> ImageByte = new ArrayList<String>(); 
    ArrayList<Bitmap> bitmapArray = new ArrayList<Bitmap>(); 

    ListView lv; 
    ListView listView; 
    Activity act = this; 

    LayoutInflater inflater = null; 

    TextView txtSearchedKeywords; 
    TextView txtSearchFor; 
    TextView txtBooksCount; 
    String keyWordsSearch; 
    String language; 

    URL bookImageURL = null; 
    Bitmap bitMapImage = null; 
    Context context = BookSearchResultActivity.this; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.book_search_layout); 

     txtSearchedKeywords = (TextView) findViewById(R.id.txtKeyWordSearched); 
     txtSearchFor = (TextView) findViewById(R.id.txtSearchFor); 
     txtBooksCount = (TextView) findViewById(R.id.txtNmbrOfBooksFound); 
     listView = (ListView) findViewById(R.id.searchList); 

     Intent getInfoIntent = getIntent(); 
     keyWordsSearch = getInfoIntent.getStringExtra("SEARCH_KEYWORDS"); 
     language = getInfoIntent.getStringExtra("LANG"); 

     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     // checking for availbe internet Connection 
     if (cm.getActiveNetworkInfo() != null 
       && cm.getActiveNetworkInfo().isAvailable() 
       && cm.getActiveNetworkInfo().isConnected()) { 

      new UIThread().execute(URL, keyWordsSearch, language); 

     } 

     listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int pos, 
        long arg3) { 
       Toast.makeText(context, BookTitle.get(pos).toString(), 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    private class UIThread extends AsyncTask<String, Integer, String> { 

     ProgressDialog progressDialog; 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      progressDialog = ProgressDialog.show(getParent(), 
        "Search in Progress...", 
        "This may Take a few seconds.\nPlease Wait..."); 

      txtSearchFor.setText("Searching in Progress...!"); 
      txtBooksCount.setVisibility(View.INVISIBLE); 

     } 

     @Override 
     protected String doInBackground(String... params) { 

      String URL = params[0]; 
      String searchKeywords = params[1]; 

      XMLParser parser = new XMLParser(); 
      String XMLString = parser.getXmlFromUrl(URL, searchKeywords, 
        language); 
      // Log.i("XML Response", XMLString); 

      Document doc = parser.getDomElement(XMLString); 

      NodeList nl = doc.getElementsByTagName(KEY_ITEM); 

      // looping through all item nodes <item> 
      for (int i = 0; i < nl.getLength(); i++) { 
       Element e = (Element) nl.item(i); 

       BookTitle.add(parser.getValue(e, KEY_BOOKTITLE)); 
       BookCoverPhotos.add("http://shiaislamicbooks.com/books_Snaps/" 
         + parser.getValue(e, KEY_BOOKCODE) + "/1_thumb.jpg"); 
       BookAuther.add(parser.getValue(e, KEY_BOOKAUTHOR)); 
       Log.i("URLs", BookCoverPhotos.toString()); 
      } 
      for (int i = 0; i < BookAuther.size(); i++) { 

       try { 
        bookImageURL = new URL(BookCoverPhotos.get(i)); 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
        Log.i("URL", "ERROR at image position" + i + ""); 
       } 

       try { 
        bitMapImage = BitmapFactory.decodeStream(bookImageURL 
          .openConnection().getInputStream()); 
        bitmapArray.add(bitMapImage); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        Log.i("BITMAP", "ERROR" + i); 
       } 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 

      progressDialog.dismiss(); 
      txtSearchFor.setText("Results For"); 
      txtSearchedKeywords.setText("\"" + keyWordsSearch + "\""); 
      txtBooksCount.setVisibility(View.VISIBLE); 
      txtBooksCount.setText(bitmapArray.size() + " Book(s) found"); 
      ImageAdapter adapter = new ImageAdapter(getBaseContext(), act); 
      listView.setAdapter(adapter); 

     } 

    } 

    public class ImageAdapter extends BaseAdapter { 

     public ImageAdapter(Context c) { 
      context = c; 
     } 

     // ---returns the number of images--- 
     public int getCount() { 
      return bitmapArray.size(); 
     } 

     public ImageAdapter(Context ctx, Activity act) { 
      inflater = (LayoutInflater) act 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     // ---returns the ID of an item--- 
     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     // ---returns an ImageView view--- 
     public View getView(int position, View convertView, ViewGroup parent) { 

      // ImageView bmImage; 

      final ViewHolder holder; 
      View vi = convertView; 
      if (convertView == null) { 
       vi = inflater.inflate(R.layout.list_style, parent, false); 
       holder = new ViewHolder(); 
       holder.txt_BooksTitle = (TextView) vi 
         .findViewById(R.id.txt_searchBookTitle); 

       holder.img_BookCoverPhoto = (ImageView) vi 
         .findViewById(R.id.img_searchBookCoverPhoto); 
       holder.txt_BooksAuthor = (TextView) vi 
         .findViewById(R.id.txt_searchAutherName); 

       holder.ratingBar = (RatingBar) vi 
         .findViewById(R.id.searchRatingbar); 

       vi.setTag(holder); 
      } else { 

       holder = (ViewHolder) vi.getTag(); 
      } 
      holder.txt_BooksTitle.setText(BookTitle.get(position) + ""); 
      holder.img_BookCoverPhoto.setImageBitmap(bitmapArray.get(position)); 
      holder.txt_BooksAuthor.setText(BookAuther.get(position) + ""); 
      holder.ratingBar.setRating(3); 
      return vi; 
     } 
    } 

    class ViewHolder { 
     TextView txt_BooksTitle; 
     TextView txt_BooksAuthor; 
     ImageView img_BookCoverPhoto; 
     RatingBar ratingBar; 
    } 
} 
+0

你也应该给:机器人:focusableInTouchMode =“假” –

+0

,你可以设置:listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE) ;对于listView或列表视图内的视图 –

+0

? –

回答

1

请更新以下代码item_list.xml文件,它会解决您的问题。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <RelativeLayout 
     android:id="@+id/rel_SearchLayout01" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 

     <ImageView 
      android:id="@+id/img_searchBookCoverPhoto" 
      android:layout_width="70dp" 
      android:layout_height="100dp" 
      android:layout_margin="5dp" 
      android:src="@drawable/ic_launcher" /> 

     <TextView 
      android:id="@+id/txt_searchBookTitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignTop="@+id/img_searchBookCoverPhoto" 
      android:layout_marginTop="10dp" 
      android:layout_toRightOf="@+id/img_searchBookCoverPhoto" 
      android:text="The Basic Doctrine Of Islam" 
      android:textSize="16sp" /> 

     <TextView 
      android:id="@+id/txt_searchAutherName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/txt_searchBookTitle" 
      android:layout_marginTop="2dp" 
      android:layout_toRightOf="@+id/img_searchBookCoverPhoto" 
      android:text="By: Andrew J Newman" 
      android:textSize="14sp" /> 

     <RatingBar 
      android:id="@+id/searchRatingbar" 
      style="?android:attr/ratingBarStyleSmall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/txt_searchAutherName" 
      android:layout_marginTop="12dp" 
      android:layout_toRightOf="@+id/img_searchBookCoverPhoto" 
      android:numStars="5" 
      android:rating="5" 
      android:stepSize="1" /> 
    </RelativeLayout> 

</RelativeLayout> 
+0

我已经尝试过,不使用android:focusable =“false”。但它没有工作。 Anuj答案工作。感谢您的回复。 @IGP –

+0

@QadirHussain从Ratingbar删除android:isIndicator =“false”,然后它的工作原理没有任何改变。 –

+0

好吧让我试试这个@IGP –

1

你可以做什么其他的替代方法是在你的getView()您可以使用您ConvertView实现OnclickListener

convertView.(new View.OnClickListener(){ 

    @Override 
    public void onClick(View view) 
    { 
     //write your code here 
    } 
}); 

不要让我知道,如果这种替代作品的权利

public View getView(final int position, View convertView, ViewGroup parent) 
    { 

      if(convertView == null) /* Create a new row view */ 
      { 
       convertView = inflater.inflate(R.layout.simplerow, null); 
      } 

     convertView.setOnClickListener(new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View v) 
       { 
        //your implementation. 
       } 
      } 


    } 
+0

我应该在哪里放置这段代码@Anuj? –

+0

这应该在'Custom Adapter'的'getView()'方法中。 – Anuj

+0

我发布了我的代码。请编辑你的答案。 @Anuj –

0

This可能适合你。

如果你希望有不同的视图组件不同的听众,然后做这样

sqView.ticker.setOnClickListener(new OnClickListener(){ 

        @Override 
        public void onClick(View view) { 
         // TODO Auto-generated method stub 
//write your code here 
} 
}); 
0

添加两个 机器人:可点击=“假” 机器人:可调焦=“假”在

您item_list.XML

我认为问题会解决

0

哟实现OnItemClickListener我们主要的Activity类。

public class BookSearchResultActivity extends Activity implement OnItemClickListener { 

//now implement unimplemented methods 
//and 
listView.setOnItemClickListener(this); 
} 

我希望这会帮助你。

-1

作出虚假点击和XML文件可聚焦于定制的ListView控件的所有

+0

@Treycos哪个政策说的? – Undo

+0

你是对的,它是关于内容的更多...时间停止今天reviewng – Treycos