এক্সপেন্ডেবললিস্টভিউ - কোনও শিশু নেই এমন গোষ্ঠীর জন্য সূচক লুকান


108

ইন একটি ExpandableListView , একটি উপায় আছে কোন সন্তান সঙ্গে দলের জন্য গ্রুপ সূচকটি লুকাতে চান?


1
স্পষ্ট করার জন্য: কোন বাচ্চা নেই এমন গোষ্ঠীর জন্য কেবলমাত্র গ্রুপ সূচককে আড়াল করার কোনও উপায় আছে?
অ্যালিওপ

উত্তর:


111

এটি >>> চেষ্টা করে দেখুন

সমস্ত আইটেম জন্য

 getExpandableListView().setGroupIndicator(null);

এক্সএমএলে

android:groupIndicator="@null"

40
আমি বিশ্বাস করি যে এটি কেবলমাত্র শিশুসুলভ নয়, সমস্ত আইটেমের জন্য গ্রুপ ইন্ডিকেটর সেট করবে।
এরিকসগ

4
পরীক্ষিত এবং কাজ করে না। এই সাধারণ লুকিয়ে থাকা সমস্ত সূচককে বাচ্চা আছে বা নেই।
শুক্রবার 21'15

2
myExpandableListView.setGroupIndicator (নাল); আমার জন্য কাজ করে
রঞ্জিত কুমার

@ এরিকোসগ ছাড়া শিশু ছাড়া গ্রুপগুলির জন্য সূচকটি লুকানোর কোনও উপায় আছে কি ??
কেজেজেবা 48

1
এটি সমস্ত সূচক গোপন করে যা কোনও শিশু নেই not
স্যাম

88

দ্য android:groupIndicatorসম্পত্তি একটি রাষ্ট্র সক্রিয় অঙ্কনযোগ্য লাগে। এটি হল, আপনি বিভিন্ন রাজ্যের জন্য আলাদা চিত্র সেট করতে পারেন।

যখন গোষ্ঠীর কোনও সন্তান না থাকে, তখন সংশ্লিষ্ট রাষ্ট্রটি 'রাষ্ট্র_সংশ্লিষ্ট'

এই রেফারেন্স লিঙ্কগুলি দেখুন:

এই এবং এই

জন্য state_empty , আপনি একটি পৃথক চিত্র সেট করতে পারেন যা বিভ্রান্তিকর নয়, বা কিছুই প্রদর্শন করতে স্বচ্ছ রঙ ব্যবহার করুন ...

আপনার আইটেমটি অন্যদের সাথে আপনার রাজ্যময় আঁকতেও যুক্ত করুন ....

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

সুতরাং, আপনার রাজ্য তালিকাটি এটির মতো হতে পারে:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_empty="true" android:drawable="@android:color/transparent"/>
    <item android:state_expanded="true" android:drawable="@drawable/my_icon_max" />
    <item android:drawable="@drawable/my_icon_min" />
</selector>

আপনি যদি এক্সপেন্ডেবললিস্টিভিটি ব্যবহার করে থাকেন তবে আপনি গ্রুপক্রোসেটরটিকে onCreate এ নিম্নলিখিত হিসাবে সেট করতে পারেন:

getExpandableListView().setGroupIndicator(getResources().getDrawable(R.drawable.my_group_statelist));

আমি এটি কাজ করতে পরীক্ষা করেছি।


36
কাজ করছে না: অ্যান্ড্রয়েড 4.0.০.২ (আইসিএস) এ পরীক্ষিত। এই পৃষ্ঠায় এই প্রশ্নের অন্যান্য প্রতিক্রিয়া দেখুন। দেখে মনে হচ্ছে অ্যান্ড্রয়েড আন-প্রসারিত গোষ্ঠীকে খালি মনে করে। কেবলমাত্র গ্রুপ সূচককে স্বচ্ছ হিসাবে সেট করুন, তারপরে আপনার গোষ্ঠী সারিতে একটি চিত্রভিউ যুক্ত করুন এবং অ্যাডাপ্টারের গেটগ্রুপভিউ পদ্ধতিতে এটি আপনার পছন্দসই আইকনে সেট করুন।
28:35

1
এই কোডটি আমার রূপে কাজ করে না (অ্যান্ড্রয়েড ৪.৪-তে পরীক্ষিত) neঅনেক সম্প্রদায়ের গোষ্ঠীটি খালি (কোনও শিশু নেই) হিসাবে বিবেচিত হয় তাই আইকনটি রঙ / স্বচ্ছ হিসাবে সেট করা আছে।
গুইচারা

1
কোডের জন্য ধন্যবাদ, তবে এটি একটি রসিকতার মতো দেখাচ্ছে: এত সাধারণ কাজের জন্য এত জটিল কোড?
আন্তোনিও সেস্তো

1
এই উত্তরটি এতগুলি 'দরকারী' এবং একটি অনুগ্রহ পেয়েছি বিশ্বাস করা খুব কঠিন, যখন এটি নথিভুক্ত করা হয়েছে যে ধসে পড়া গোষ্ঠীগুলি কার্য সম্পাদনের কারণে খালি বিবেচিত হয়!
3c71

41

স্ট্রেপয়েন্টারের উত্তর এবং ব্লগের কোডের ভিত্তিতে, আপনি কোডটি আরও সহজ করতে পারেন:

আপনার এক্সএমএলে এক্সপেন্ডেবললিস্টভিউতে ফোলিং যুক্ত করুন:

android:groupIndicator="@android:color/transparent"

তারপরে অ্যাডাপ্টারে আপনি নিম্নলিখিতগুলি করুন:

@Override
protected void bindGroupView(View view, Context paramContext, Cursor cursor, boolean paramBoolean){
    **...**

    if ( getChildrenCount( groupPosition ) == 0 ) {
       indicator.setVisibility( View.INVISIBLE );
    } else {
       indicator.setVisibility( View.VISIBLE );
       indicator.setImageResource( isExpanded ? R.drawable.list_group_expanded : R.drawable.list_group_closed );
    }
}

সেটআইমেজআর রিসোর্স পদ্ধতিটি ব্যবহার করে আপনি এটি সবই ওয়ান-লাইনারের সাথে সম্পন্ন করুন। আপনার অ্যাডাপ্টারে আপনার তিনটি পূর্ণসংখ্যার অ্যারে দরকার নেই। রাষ্ট্রের সম্প্রসারণ এবং ধসে পড়ার জন্য আপনার কোনও এক্সএমএল নির্বাচকের দরকার নেই। সমস্ত জাভা মাধ্যমে সম্পন্ন করা হয়।

এছাড়াও, কোনও গ্রুপ যখন ডিফল্টরূপে প্রসারিত হয় যা ব্লগ থেকে কোড নিয়ে কাজ করে না সে ক্ষেত্রেও এই পদ্ধতিটি সঠিক সূচকটি প্রদর্শন করে।


4
এটি getGroupView()আপনার BaseExpandableListAdapterপ্রয়োগের পদ্ধতিতে ব্যবহৃত হতে বোঝানো হয়েছে । এই উদাহরণ বাস্তবায়ন একবার দেখুন
জেনজ

5
@ জেনজ "নির্দেশক" কী?
আইবুনি

তিনি ViewHolderপ্যাটার্নটি ব্যবহার করেন । indicatorভিউ হোল্ডারের পরিবর্তনশীল নাম।
গুইচারা

সূচকটি একটি চিত্রদর্শন The চিত্রগুলি আপনি রাজ্যের উপর ভিত্তি করে প্রদর্শন করতে চান
ওজনুগা জুড ওচালিফু

সূচকটি গ্রুপ_রো xML: <? xML?> <লিনিয়ারলয়েট অ্যান্ড্রয়েড: ওরিয়েন্টেশন = "অনুভূমিক" অ্যান্ড্রয়েড: বিন্যাস_উইথ = "র‌্যাপ_কন্টেন্ট" অ্যান্ড্রয়েড: বিন্যাস_পরিচয় = "ফিলিপ_প্যারেন্ট"> <চিত্রভিউ অ্যান্ড্রয়েড: বিন্যাস_ উচ্চতা = "20px" অ্যান্ড্রয়েড : লেআউট_উইথ = "20px" অ্যান্ড্রয়েড: আইডি = "@ + আইডি / এক্সপ্লিস্ট_ইন্ডিসিটার" অ্যান্ড্রয়েড: src = "@ অঙ্কনযোগ্য / এক্সপেন্ডার_গ্রুপ" /> <টেক্সটভিউ অ্যান্ড্রয়েড: লেআউট_উইট = "র‌্যাপ_কন্টেন্ট" অ্যান্ড্রয়েড: লেআউট_উইথ = "ফিল_প্যারেন্ট" অ্যান্ড্রয়েড: আইডি = " @ + আইডি / গ্রুপনাম "অ্যান্ড্রয়েড: প্যাডিং লেফট =" 30px "অ্যান্ড্রয়েড: টেক্সট স্টাইল =" গা bold় "অ্যান্ড্রয়েড: টেক্সট সাইজ =" 16px "/> </
LinearLayout

26

অন্য একটি উত্তরে যেমন উল্লেখ করা হয়েছে, যেহেতু অ্যান্ড্রয়েড একটি আন-প্রসারিত তালিকা গোষ্ঠীটিকে খালি হিসাবে বিবেচনা করে, তাই এই গোষ্ঠীর বাচ্চা থাকলেও আইকনটি টানা হয় না।

এই লিঙ্কটি আমার জন্য সমস্যার সমাধান করেছে: http://myLivewithandroid.blogspot.com/2011/06/hide-group-indicator- for- empty-groups.html

মূলত আপনাকে ডিফল্ট অঙ্কনযোগ্যকে স্বচ্ছ হিসাবে সেট করতে হবে, ছবিটিকে আপনার গ্রুপ ভিউতে ইমেজভিউ হিসাবে সরিয়ে নিয়ে যেতে হবে এবং আপনার অ্যাডাপ্টারে চিত্রটি টগল করতে হবে।


12

আপনার কোডে শুধু গ্রুপ তালিকা জন্য কাস্টম XML ব্যবহার এবং যে রাখা ImageView জন্য GroupIndicator

এবং আপনার এক্সপেন্ডেবললিস্টএডাপ্টারে নীচে অ্যারে যুক্ত করুন

private static final int[] EMPTY_STATE_SET = {};
private static final int[] GROUP_EXPANDED_STATE_SET = { android.R.attr.state_expanded };
private static final int[][] GROUP_STATE_SETS = { EMPTY_STATE_SET, // 0
GROUP_EXPANDED_STATE_SET // 1
};

এছাড়াও ExpandableListAdapter এর পদ্ধতি নিচে হিসাবে একই জিনিস যোগ

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
{ 
    if (convertView == null) 
    {
        LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.row_group_list, null);
    }

    //Image view which you put in row_group_list.xml
    View ind = convertView.findViewById(R.id.iv_navigation);
    if (ind != null)
    {
        ImageView indicator = (ImageView) ind;
        if (getChildrenCount(groupPosition) == 0) 
        {
            indicator.setVisibility(View.INVISIBLE);
        } 
        else 
        {
            indicator.setVisibility(View.VISIBLE);
            int stateSetIndex = (isExpanded ? 1 : 0);
            Drawable drawable = indicator.getDrawable();
            drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
        }
    }

    return convertView;
}

তথ্যসূত্র: http://myLivewithandroid.blogspot.in/2011/06/hide-group-indicator-for-empty-groups.html


10

এক্সএমএলে

android:groupIndicator="@null"

ইন ExpandableListAdapter-> getGroupViewনিম্নলিখিত কোডটি অনুলিপি করুন

if (this.mListDataChild.get(this.mListDataHeader.get(groupPosition)).size() > 0){
      if (isExpanded) {
          arrowicon.setImageResource(R.drawable.group_up);
      } else {
          arrowicon.setImageResource(R.drawable.group_down);
      }
}

1
ডিফল্ট ড্রয়েবল কীভাবে ব্যবহার করবেন? এটি বলে: 'গ্রুপ-আপ' প্রতীকটি সমাধান করতে পারে না
StNickolay


4

আপনি আমার সমাধান প্রস্তাব:

1) সাফ ডিফল্ট গ্রুপ ইন্ডিকেটর:

<ExpandableListView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"       
    android:layout_width="wrap_content"
    android:layout_height="240dp"        
    android:layout_gravity="start"
    android:background="#cccc"  
    android:groupIndicator="@android:color/transparent"     
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"        
    android:dividerHeight="0dp"  
     />

2) প্রসারণযোগ্য অ্যাডাপ্টারে:

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = new TextView(context);
    }
    ((TextView) convertView).setText(groupItem.get(groupPosition));     
    ((TextView) convertView).setHeight(groupHeight);
    ((TextView) convertView).setTextSize(groupTextSize);

    //create groupIndicator using TextView drawable
    if (getChildrenCount(groupPosition)>0) {
        Drawable zzz ;
        if (isExpanded) {
            zzz = context.getResources().getDrawable(R.drawable.arrowup);
        } else {
            zzz = context.getResources().getDrawable(R.drawable.arrowdown);
        }                               
        zzz.setBounds(0, 0, groupHeight, groupHeight);
        ((TextView) convertView).setCompoundDrawables(null, null,zzz, null);
    }       
    convertView.setTag(groupItem.get(groupPosition));       

    return convertView;
}


2

শুধু মিহির ত্রিবেদী এর উত্তরে উন্নতি করতে চেয়েছি। আপনি এটি MyExpandableListAdapter বর্গের মধ্যে getGroupView () এর মধ্যে রাখতে পারেন

    View ind = convertView.findViewById(R.id.group_indicator);
    View ind2 = convertView.findViewById(R.id.group_indicator2);
    if (ind != null)
    {
        ImageView indicator = (ImageView) ind;
        if (getChildrenCount(groupPosition) == 0)
        {
            indicator.setVisibility(View.INVISIBLE);
        }
        else
        {
            indicator.setVisibility(View.VISIBLE);
            int stateSetIndex = (isExpanded ? 1 : 0);

            /*toggles down button to change upwards when list has expanded*/
            if(stateSetIndex == 1){
                ind.setVisibility(View.INVISIBLE);
                ind2.setVisibility(View.VISIBLE);
                Drawable drawable = indicator.getDrawable();
                drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
            }
            else if(stateSetIndex == 0){
                ind.setVisibility(View.VISIBLE);
                ind2.setVisibility(View.INVISIBLE);
                Drawable drawable = indicator.getDrawable();
                drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
            }
        }
    }

... এবং লেআউট ভিউ হিসাবে, আমার গ্রুপ_সাইটস.এক্সএমএলটি এভাবে দেখা যায়

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

<TextView
    android:id="@+id/group_heading"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="20dp"
    android:paddingTop="16dp"
    android:paddingBottom="16dp"
    android:textSize="15sp"
    android:textStyle="bold"/>

<ImageView
    android:id="@+id/group_indicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/arrow_down_float"
    android:layout_alignParentRight="true"
    android:paddingRight="20dp"
    android:paddingTop="20dp"/>

<ImageView
    android:id="@+id/group_indicator2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/arrow_up_float"
    android:layout_alignParentRight="true"
    android:visibility="gone"
    android:paddingRight="20dp"
    android:paddingTop="20dp"/>

আশা করি এটি সাহায্য করবে ... একটি উত্সাহ ছেড়ে যাওয়ার কথা মনে রাখবেন


1

এটি আমার জন্য নিখুঁতভাবে কাজ করছে এটি ব্যবহার করুন।

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

<item android:drawable="@drawable/group_indicator_expanded" android:state_empty="false" android:state_expanded="true"/>
<item android:drawable="@drawable/group_indicator" android:state_empty="true"/>
<item android:drawable="@drawable/group_indicator"/>

</selector>

আপনি কি আপনার এক্সপেন্ডেবললিস্টভিউ কোডটি পোস্ট করতে পারেন? এটি আমার পক্ষে কাজ করছে না (গ্রুপ_এন্ডিসিকেটার বাচ্চাদের সাথে বা না থাকা গোষ্ঠীর জন্য উপস্থিত হবে)।

1

আপনি কি ExpandableListViewএর বৈশিষ্ট্য পরিবর্তন করার চেষ্টা করেছেন android:groupIndicator="@null"?


0

সহজভাবে, আপনি লুকানো গোষ্ঠী শিরোলেখের জন্য উচ্চতা = 0 সহ একটি নতুন এক্সএমএল লেআউট তৈরি করেন। উদাহরণস্বরূপ, এটি 'group_list_item_empty.xML'

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"              
              android:layout_width="match_parent"
              android:layout_height="0dp">
</RelativeLayout>

তারপরে আপনার সাধারণ গ্রুপের শিরোনাম লেআউটটি হ'ল 'আপনার_গোষ্ঠী_লিস্ট_সাইট__ ফাইল.এক্সএমএল'

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="48dp"
              android:orientation="horizontal">
    ...your xml layout define...
</LinearLayout>

অবশেষে, আপনি কেবলমাত্র আপনার অ্যাডাপ্টার শ্রেণিতে getGroupView পদ্ধতিটি আপডেট করুন:

public class MyExpandableListAdapter extends BaseExpandableListAdapter{   

    //Your code here ...

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup viewGroup) {
        if (Your condition to hide the group header){
            if (convertView == null || convertView instanceof LinearLayout) {
                LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                convertView = mInflater.inflate(R.layout.group_list_item_empty, null);
            }           
            return convertView;
        }else{      
            if (convertView == null || convertView instanceof RelativeLayout) {
                LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                convertView = mInflater.inflate(R.layout.your_group_list_item_file, null);              
            }   
            //Your code here ...
            return convertView;
        }
    }
}

গুরুত্বপূর্ণ : লেআউট ফাইলগুলির গোপন ট্যাগ (লুকানো এবং স্বাভাবিক) অবশ্যই আলাদা হতে হবে (উপরে উদাহরণস্বরূপ, লিনিয়ারলআউট এবং রিলেটিভলআউট)


-3

রূপান্তর ভিউ.সেটভিজিবিলিটি (View.GONE) এর কৌশলটি করা উচিত।

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    DistanceHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.list_search_distance_header, parent, false);
        if (getChildrenCount(groupPosition)==0) {
            convertView.setVisibility(View.GONE);
        }

3
এটি কেবলমাত্র সমস্ত আইটেম সরিয়ে দেয়: তালিকা খালি -> আমার দুঃখ আছে :(
ইচ

আপনি কি কাউন্টার চেক যুক্ত করেছেন? যদি (getChildrenCount (গ্রুপ পজিশন) == 0) {
ভাদিম ভিকুলিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.