2012-06-30 67 views
6

Tôi có bố cục mặt hàng ListView đang sử dụng HorizontalScrollView ở chính giữa. Tôi đã sử dụng thuộc tính android "android:descendantFocusability="blocksDescendants"" trên bố mẹ LinearLayout để các mục ListView vẫn có thể chọn.Cuộn ngang trong mục ListView?

Sự cố tôi gặp phải là khi nhấp vào một phần của mục ListViewHorizontalScrollView, sự kiện nhấp vào mục ListView không được gọi.

Làm cách nào để có được sự kiện nhấp của HorizontalScrollView để gọi sự kiện nhấp vào mục danh sách ListView?

+0

xin vui lòng sử dụng cố gắng bắt blog surroung listview bấm vào sự kiện và in lỗi trong nhật ký và đăng ur lỗi ở đây để chúng tôi có thể exatcly biết những gì đang xảy ra. – Aamirkhan

+0

Tôi không có bất kỳ lỗi nào ... Vấn đề là phải làm với hành vi của các chế độ xem khi chúng được thiết lập theo cách này. – startupsmith

+0

ok u có thể đăng ur xml tập tin mà u r sử dụng như adatper tùy chỉnh? – Aamirkhan

Trả lời

1

HorizontalScrollView không có "onClick()", thấy điều này http://developer.android.com/reference/android/widget/HorizontalScrollView.html

Nó hỗ trợ cử chỉ và có "onTouchEvent (MotionEvent ev)"

Vì vậy, bạn có thể sử dụng nó như nhấp chuột . Xem bản demo tiếp theo mà tôi đã chuẩn bị.

//  Followin code will not work for HorizontalScrollView 
     /*hsv1.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(HorizontalListActivity.this, tvMiddle.getText().toString().trim(), Toast.LENGTH_SHORT).show(); 
      } 
     });*/ 

     hsv1.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       Toast.makeText(YourActivity.this, "Your Msg", Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     }); 
+0

Với onTouch sự kiện này được kích hoạt cho mọi lần chạm? Tôi vẫn muốn có thể cuộn HorizontalScrollView. Chỉ trong trường hợp người dùng nhấp/chạm vào HorizontalScrollView, tôi có muốn nó hoạt động với hành vi nhấp chuột của mục listview bình thường hay không. – startupsmith

+0

Xin lỗi, tôi không giúp bạn đúng cách. Nếu bạn có thời gian, bạn có thể giải thích chi tiết cho tôi không. –

0

Thêm boolean biến Touchdown và Touchup đến lớp bộ chuyển đổi như sau dường như làm việc khá tốt:

private class MyListAdapter extends ArrayAdapter<MyObject>{ 
    ... 
    //touch down + touch up with no other motion events in between = click 
    boolean touchDown = false; 
    boolean touchUp = false; 
    private int iHostViewID; 
    ... 

    public MyListAdapter(Context context,int viewResourceId, List<MyObject> objects) { 
     super(context, textViewResourceId, objects); 
     iHostViewID = viewResourceId; 
    } 

    @Override 
    public View getView(int pos, View convertView, ViewGroup parent){ 
     View itemView = convertView; 

     //iff we cannot re-use a view 
     if(itemView == null){ 
      LayoutInflater inflater = (
      (LayoutInflater)hContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      itemView = inflater.inflate(iHostViewID, null); 
     } 

     final View hItemView = itemView; 
     final int hPosition = pos; 
     ... 
     final HorizontalScrollView textDataSV = 
     (HorizontalScrollView)itemView.findViewById(R.id.widget_hsv); 
     textDataSV.setOnTouchListener(new OnTouchListener(){ 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 

        if(event.getAction() == MotionEvent.ACTION_DOWN){ 

         touchDown = true; 
        } 
        else if(event.getAction() == MotionEvent.ACTION_UP){ 

         touchUp = true; 
        } 

        else{ 

         touchDown = false; 
         touchUp = false; 
        } 

        if(touchDown && touchUp){ 
         //click 
         //mMyListView is the reference to the list view 
         //instantiated in the view controller class responsible 
         //for setting this adapter class as the list view's adapter 
         mMyListView.performItemClick(hItemView, hPosition, 
         hItemView.getId()); 
        } 



        return false; 
       } 
     }); 
    } 
} 

Đó là xa hoàn hảo, nhưng nên làm việc cho hầu hết các tiêu chuẩn trường hợp sử dụng