2012-06-30 17 views
6

मेरे पास ListView आइटम लेआउट है जो केंद्र में HorizontalScrollView का उपयोग कर रहा है। मैंने अपने माता-पिता LinearLayout पर एंड्रॉइड विशेषता "android:descendantFocusability="blocksDescendants"" का उपयोग किया है ताकि ListView आइटम अभी भी चयन योग्य हो।क्षैतिज स्क्रॉलव्यू?

मेरी समस्या यह है कि ListView आइटम जो HorizontalScrollView है, पर क्लिक करते समय ListView आइटम क्लिक ईवेंट नहीं कहा जाता है।

के क्लिक ईवेंट को ListView सूची आइटम क्लिक ईवेंट पर कॉल करने के लिए मैं कैसे क्लिक कर सकता हूं?

+0

लिए काम करना चाहिए कृपया कोशिश करें ब्लॉग surroung listview पर क्लिक करें लॉग इन करें और लॉग में प्रिंट त्रुटि और यहां अपनी त्रुटि पोस्ट करें ताकि हम जान सकें कि क्या गलत हो रहा है। – Aamirkhan

+0

मुझे कोई त्रुटि नहीं है ... समस्या इस विचार के व्यवहार के साथ करना है क्योंकि वे इस तरह से सेटअप हैं। – startupsmith

+0

ठीक है क्या आप अपनी एक्सएमएल फाइल पोस्ट कर सकते हैं जिसे आप कस्टम एडैपर के रूप में उपयोग कर रहे हैं? – Aamirkhan

उत्तर

1

HorizontalScrollView नहीं है "onClick()", इस http://developer.android.com/reference/android/widget/HorizontalScrollView.html

यह इशारों का समर्थन और "onTouchEvent (MotionEvent EV)" है

तो आप इसे क्लिक के रूप में उपयोग कर सकते हैं । फॉलोइन डेमो देखें जिसे मैंने तैयार किया है।

//  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

ऑन टच के साथ ईवेंट हर स्पर्श के लिए निकाल दिया जाता है? मैं अभी भी क्षैतिजस्कोल दृश्य को स्क्रॉल करने में सक्षम होना चाहता हूं। केवल उस स्थिति में जहां उपयोगकर्ता क्षैतिज स्क्रॉल दृश्य को क्लिक/टैप करता है, क्या मैं इसे सामान्य सूचीदृश्य आइटम क्लिक व्यवहार के साथ कार्य करना चाहता हूं। – startupsmith

+0

क्षमा करें, मैं आपको ठीक से नहीं मिल रहा हूं। यदि आपके पास समय है, तो क्या आप मुझे विस्तार से समझा सकते हैं। –

0

एडाप्टर वर्ग के रूप में इस प्रकार के बूलियन चर टचडाउन और touchup जोड़ना काफी अच्छी तरह से काम करने के लिए लगता है:

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; 
       } 
     }); 
    } 
} 

यह सही कतई नहीं है, लेकिन अधिकांश मानक उपयोग-मामले

संबंधित मुद्दे