14

में काम नहीं कर रहे कई आइटमों के लिए ग्रिड व्यू आइटम सूची चयनकर्ता चित्र में दिखाए गए अनुसार लंबे प्रेस पर चयनकर्ता को आकर्षित करना चाहते हैं। जब मैं एक आइटम पर लंबे समय तक दबाता हूं, तो सीएबी मेनू सक्रिय होता है। लेकिन सूची चयनकर्ता संकेतक क्लिक करने के बाद एक बार बंद हो जाता है। मैं चाहता हूं कि सूची चयनकर्ता सक्रिय होने के लिए सीएबी मेनू सक्रिय होने तक सक्रिय हो जाएं। और यदि मैं डबल टैप करता हूं तो रंग टॉगल करना चाहिए। यह कोड एक झिलमिलाहट के रूप में काम करता है जब मैं उस पर क्लिक करता हूं। किसी को भी इसी तरह का सामना करना पड़ा? क्या इस कार्यक्षमता को लाने के लिए कोई हैक है?एंड्रॉइड

कई चयन के साथ GridView: मेरे OnCreate में

enter image description here

GridView setchoice:

gridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL); 
gridView.setMultiChoiceModeListener(new MultiChoiceModeListener()); 

यह ठीक काम कर रहा है:

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

    ImageView iv = (ImageView) v 
         .findViewById(R.id.imageview2); 
       ViewGroup gridChild = (ViewGroup) gridView 
         .getChildAt(position); 
       ViewGroup gridGrandChild = (ViewGroup) gridChild 
         .getChildAt(0); 
       ViewGroup gridGreatGrandChild = (ViewGroup) gridGrandChild 
         .getChildAt(0); 
       int childSize = gridGreatGrandChild.getChildCount(); 
       if (iv.getId() == gridGreatGrandChild.getChildAt(1) 
         .getId()) { 
        if (iv.getVisibility() == 4) 
         iv.setVisibility(View.VISIBLE); 
        else 
         iv.setVisibility(View.INVISIBLE); 
       } 
}}); 

मैं एक ही लागू करने के लिए कोशिश कर रहा हूँ MultiChoiceModeListener() कक्षा af के अंदर कोड सीएबी मेनू सक्रिय है।

public void onItemCheckedStateChanged(ActionMode mode, int position, 
      long id, boolean checked) { 
} 

विधि के अंदर एक ही कोड की प्रतिलिपि बनाई गई। लेकिन मैं व्यू ग्रुप के अंदर तत्वों तक पहुंचने में असमर्थ हूं। लेकिन मैं पूरी तरह से ग्रिड व्यू तक पहुंचने में सक्षम हूं। लेकिन ग्रिड के अंदर व्यक्तिगत बच्चा नहीं।

यहाँ मेरी gridview लेआउट है:

<GridView 
      android:id="@+id/grid_view" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:columnWidth="190dp" 
      android:drawSelectorOnTop="true" 
      android:choiceMode="multipleChoice" 
      android:horizontalSpacing="3dp" 
      android:listSelector="@drawable/list_selector" 
      android:numColumns="auto_fit" 
      android:paddingRight="4dp" 
      android:stretchMode="spacingWidthUniform" 
      android:verticalSpacing="3dp" > 
     </GridView> 

GridView में प्रत्येक आइटम इस लेआउट के साथ निर्माण किया है:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:drawable="@color/gridviewlistselector" android:state_focused="true" android:state_pressed="false"/> 
<item android:state_focused="true"><shape> 
     <solid android:color="#66000000" /> 
    </shape></item> 
<item android:state_selected="true"><shape> 
     <solid android:color="#66000000" /> 
    </shape></item> 
<item android:state_pressed="true"><shape> 
     <solid android:color="#66000000" /> 
    </shape></item> 
<item android:state_enabled="false" android:state_focused="true"><shape> 
     <solid android:color="#66000000" /> 
    </shape></item> 

</selector> 
:

<FrameLayout 
    android:id="@+id/frameLayout1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <RelativeLayout 
     android:id="@+id/relativelayout" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <ImageView 
      android:id="@+id/imageview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 
     </ImageView> 

     <ImageView 
      android:id="@+id/imageview2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/imageview" 
      android:layout_alignLeft="@+id/imageview" 
      android:layout_alignRight="@+id/imageview" 
      android:layout_alignTop="@+id/imageview" 
      android:visibility="invisible" 
      android:background="#76f9a49c"    
      > 
     </ImageView> 
    </RelativeLayout> 

    <ImageView 
     android:id="@+id/tagimage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top|right" 
     android:layout_marginRight="-4dp" 
     android:src="@drawable/tag" 
     android:visibility="invisible" /> 

    <ImageView 
     android:id="@+id/countimage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|right" 
     android:layout_marginBottom="8dp" 
     android:layout_marginRight="5dp" 
     android:src="@drawable/dealcount_overlay" 
     android:visibility="invisible" /> 

    <TextView 
     android:id="@+id/count" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|right" 
     android:layout_marginBottom="11dp" 
     android:layout_marginRight="24dp" 
     android:text="100" 
     android:textColor="#fff" 
     android:visibility="invisible" > 
    </TextView> 

    <ProgressBar 
     android:id="@+id/progressbar" 
     style="@android:style/Widget.ProgressBar.Small" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_gravity="center" 
     android:visibility="visible" /> 
</FrameLayout> 

<TextView 
    android:id="@+id/textView_nodata" 
    android:layout_width="wrap_content" 
    android:layout_height="150dp" 
    android:layout_below="@+id/frameLayout1" 
    android:layout_centerHorizontal="true" 
    android:text="No data available. Try different query!" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:visibility="gone" /> 

</RelativeLayout> 

यहाँ मेरी list_selector.xml है

मैं कार्यक्षमता कैसे प्राप्त कर सकता हूं? मैं इस पर अटक गया हूँ। मैंने चयनकर्ताओं पर विभिन्न संयोजनों की कोशिश की। लेकिन मेरे लिए कुछ भी काम नहीं कर रहा है। क्या मुझे कोई अन्य विवरण प्रदान करने की ज़रूरत है?

उत्तर

1

मुझे यकीन है कि यह सही समाधान है नहीं कर रहा हूँ, लेकिन मैं अपने सूची आइटम पर android:background के लिए सेट:

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:exitFadeDuration="@android:integer/config_mediumAnimTime" > 

    <!-- I never see this one - the grid items are not focusable --> 
    <item android:state_pressed="false" android:state_focused="true" android:drawable="@drawable/list_focused" /> 

    <!-- while pressed --> 
    <item android:state_pressed="true" android:drawable="@drawable/pressed_background" /> 

    <!-- while selected in actionmode --> 
    <item android:state_activated="true" android:drawable="@color/pressed" /> 

    <item android:drawable="@android:color/transparent" /> 
</selector> 

मैं ग्रिड दृश्य पर android:listSelector विशेषता निर्धारित नहीं की।

+0

लेकिन मैं अपने gridview में केवल listSelector मदों के लिए समाधान की जरूरत है – intrepidkarthi

+0

यह बहु चयन के लिए काम कर रहा है? – intrepidkarthi

+0

हां। कोई अन्य कोड की आवश्यकता नहीं थी। आपके जैसे CHOICE_MODE_MULTIPLE_MODAL'। साथ ही, मैंने गुण 'एंड्रॉइड: पसंद मोड' और 'एंड्रॉइड: ड्रा सिलेक्टरऑनटॉप' को छोड़ दिया। – dokkaebi

0

इसके लिए आपको ग्रिड व्यू आइटम, पृष्ठभूमि रंग को एकल/लंबे क्लिक पर बदलने की आवश्यकता है।

नीचे उसी के लिए, संदर्भ कोड है:

GridView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     mAdapter.setSelected(position,true);           
     view.setBackgroundColor(Color.XYZ); 
    } 
} 

आशा इस मदद की। धन्यवाद।

+0

मुझे शीर्ष पर एक पारदर्शी ओवरले की आवश्यकता है। पृष्ठभूमि पर नहीं। – intrepidkarthi

+0

फिर आपको सेटबैकग्राउंड कॉलर को कॉल करने की आवश्यकता नहीं है, लेकिन याद रखें कि आपके दृश्य की पृष्ठभूमि पारदर्शी होनी चाहिए (शीर्ष पर ओवरले प्राप्त करने के लिए)। एक बार जब आप सेट सेलेक्टेड() कॉल करते हैं, तो ग्रिड व्यू को चयनकर्ता एक्सएमएल के अनुसार आइटम का चयन करना चाहिए। –

0

अपने ग्रिड आइटम में पैडिंग दें। ऑब्जेक्ट को ट्रैक करने के लिए ग्रिड एडाप्टर में प्रत्येक ऑब्जेक्ट के लिए बीन क्लास बनाए रखें या अचयनित किया गया है। इस मान के आधार पर आप चयनित/अचयनित स्थिति में अपने ग्रिड आइटम पृष्ठभूमि रंग एसीसी को अपडेट कर सकते हैं। ऑडिटमक्लिक सूची में ऑब्जेक्ट मान अपडेट करें और पृष्ठभूमि भी देखें।

0

यह चयनित वस्तुओं को ट्रैक करके और एडाप्टर के अंदर अपनी पृष्ठभूमि को बदलकर हासिल किया जा सकता है।

मुझे लगता है कि आप से this post

0

मैं अपने requirement.In देर तक दबाए रखने श्रोता के अनुसार कस्टम ड्रॉएबल लागू करने के लिए सुझाव दिया हूँ थोड़ी मदद मिल जाएगा, तो आप इसे जो भी राज्य आप आवश्यक किया जा रहा है लागू कर सकते हैं। यह हमारे स्वयं के खरोंच से कोड लिखने का एक तरीका है।

https://github.com/rameshkec85/Example-Android-CustomDrawableStates