2011-12-19 13 views
7

का पता लगते ही नहीं क्लिक करें मैं एक GridView उस में से निम्नलिखित है LinearLayout:एंड्रॉयड GridView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <GridView 
     android:id="@+id/songs_grid" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clickable="true" 
     android:columnWidth="250dp" 
     android:gravity="center" 
     android:horizontalSpacing="10dp" 
     android:numColumns="auto_fit" 
     android:verticalSpacing="10dp" /> 

</LinearLayout> 

GridView डेटा एक कस्टम एडेप्टर द्वारा आपूर्ति की है (एक सरल ViewHolder उपयोग करते हुए):

public class SongsAdapter extends BaseAdapter { 

    private Context context; 

    private LayoutInflater mInflater; 

    private ArrayList<Song> songList; 

    public SongsAdapter(Context context, ArrayList<Song> songList) 
    { 
     this.context = context; 

     this.songList = songList; 

     mInflater = LayoutInflater.from(this.context); 
    } 

    @Override 
    public int getCount() 
    { 
     return songList.size(); 
    } 

    public Object getItem(int position) 
    { 
     return songList.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     SongViewHolder viewHolder; 

     if (convertView == null) 
     { 
      convertView = mInflater.inflate(R.layout.song_list_item, null); 

      viewHolder = new SongViewHolder(); 

      //Get Views from Layout Template 
      viewHolder.AlbumArt = (ImageView)convertView.findViewById(R.id.albumart); 
      viewHolder.Title = (TextView)convertView.findViewById(R.id.title); 
      viewHolder.Artist = (TextView)convertView.findViewById(R.id.artist); 
     } 
     else 
     { 
      viewHolder = (SongViewHolder) convertView.getTag(); 
     } 

     Song song = songList.get(position); 

     Bitmap bitmap = song.getAlbumArt(); 
     Bitmap missing = BitmapFactory.decodeResource(context.getResources(), R.drawable.albumart_missing); 

     Bitmap albumArt = bitmap == null ? missing : bitmap; 

     viewHolder.AlbumArt.setImageBitmap(albumArt); 
     viewHolder.Title.setText(song.getTitle()); 
     viewHolder.Artist.setText(song.getArtist()); 

     convertView.setTag(viewHolder); 

     return convertView; 
    } 
} 

जब ऐप शुरू होता है तो इसे गाने की एक सूची मिलती है (एक्सएमएल से लेकिन वर्तमान में मैन्युअल रूप से दर्ज की गई सूची का उपयोग करके) और मेरे एडाप्टर को पास करता है और फिर OnItemClickListener:

सेट करता है
GridView gridView = (GridView) findViewById(R.id.songs_grid); 
gridView.setAdapter(new SongsAdapter(this, fk.getSongList())); 

gridView.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
    { 
     LinearLayout layout = (LinearLayout)view; 

     TextView songTitle = (TextView)layout.findViewById(R.id.song_title); 

     Song song = fk.getSong((String) songTitle.getText()); 

     if(song != null) 
     { 
      Intent play = new Intent(getBaseContext(), Play.class); 
      startActivity(play); 
     } 
    } 
}); 

जब मैंने पहली बार इस कोड को लागू किया, तो यह सब ठीक काम किया, और मुझे यकीन है कि मैंने कुछ भी नहीं बदला है। मैं सॉन्ग टाइटल स्क्रॉल के लिए एक मार्की फैशन में टेक्स्ट बनाने की कोशिश कर रहा था अगर यह बहुत लंबा था, लेकिन यह काम नहीं कर सका। इस चरण के दौरान मैंने पाया कि क्लिक काम करना बंद कर दिया। अब मैंने उस कोड को हटा दिया है (मुझे विश्वास है), लेकिन यह अभी भी विफल रहता है।

जब मैं स्पर्श/क्लिक करता हूं (जिसे आप इसे कहते हैं) कुछ भी नहीं होता है। कोई त्रुटि नहीं है।

क्या मेरी कोड के साथ गलत है कि इस मुद्दे का कारण होता है?

+0

मुझे पूरी तरह से यकीन नहीं है, इसलिए मैं सिर्फ एक टिप्पणी के रूप में पोस्ट करूंगा; ग्रिडव्यू से क्लिक करने योग्य-विशेषता हटाएं। मुझे लगता है कि यह दृश्य में आइटम्स के लिए क्लिक-इवेंट ओवरराइड कर सकता है- – Jave

+0

यह जांचने के लिए लॉग ऑन करने का प्रयास करें कि ITemClick कहलाता है या नहीं। यदि हां, तो गीत पैकेज का मूल्य देखें। –

+0

@ दुख की बात नहीं है, मुझे विश्वास है कि मैंने इसे जोड़ने और इसे काम करने के लिए जोड़ा है, लेकिन अभी भी काम नहीं कर रहा है! :(धन्यवाद हालांकि! – neildeadman

उत्तर

36

अपना आइटम लेआउट देखें। यदि गीत_list_item लेआउट दृश्यों में से कोई भी क्लिक करने योग्य के रूप में चिह्नित किया गया है तो वे ग्रिड के ऑनक्लिक श्रोता को जवाब देने से रोक देंगे।

+0

यह। यह एक हजार बार। लेआउट पर क्लिक करने योग्य ग्रिडव्यू के लिए क्लिक-इवेंट ओवरराइड करेगा। क्लिक घटनाओं को संभालने का इतना भयानक तरीका। – hnilsen

+0

मैं इस बारे में उत्सुक हूं कि इस उत्तर में कुछ मिलियन अधिक अपवॉट नहीं हैं। – razielsarafan

+6

मैंने अभी परीक्षण किया और देखा कि 'फोकस करने योग्य' संपत्ति ग्रिडव्यू के लिए क्लिक-इवेंट को भी अवरुद्ध करती है। – rogcg

6

सुनिश्चित करें कि clickable-GridView में योगदान दृश्य में आइटम के लिए क्लिक-ईवेंट को ओवरराइड नहीं करता है।

+0

यह पूरी तरह सटीक है, और 'सही उत्तर' के समान प्रतिक्रिया है।लेआउट क्लिक करने योग्य-विशेषताएँ पूरी तरह से ग्रिड व्यू से ईवेंट खाती हैं। – hnilsen

1

मैं इस समस्या का सामना किया और समाधान dmon के जवाब के समान है। यदि किसी आइटम के बच्चे का चयन करने योग्य है, तो यह आइटम को क्लिक करने योग्य भी रोकता है। तो यदि android:textIsSelectable सत्य है। यदि आप सभी छवि दृश्य और पाठ दृश्य एंड्रॉयड बनाने

0

उर सेल एक्सएमएल

android:descendantFocusability="blocksDescendants" 
1

को यह करें: फ़ोकस करने योग्य = "false" एंड्रॉयड: focusableInTouchMode = "false"

वहाँ नहीं होगा ग्रिडव्यू आइटम में कोई समस्या हो, श्रोता

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