উত্তর:
এটি >>> চেষ্টা করে দেখুন
সমস্ত আইটেম জন্য
getExpandableListView().setGroupIndicator(null);
এক্সএমএলে
android:groupIndicator="@null"
দ্য 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));
আমি এটি কাজ করতে পরীক্ষা করেছি।
স্ট্রেপয়েন্টারের উত্তর এবং ব্লগের কোডের ভিত্তিতে, আপনি কোডটি আরও সহজ করতে পারেন:
আপনার এক্সএমএলে এক্সপেন্ডেবললিস্টভিউতে ফোলিং যুক্ত করুন:
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 );
}
}
সেটআইমেজআর রিসোর্স পদ্ধতিটি ব্যবহার করে আপনি এটি সবই ওয়ান-লাইনারের সাথে সম্পন্ন করুন। আপনার অ্যাডাপ্টারে আপনার তিনটি পূর্ণসংখ্যার অ্যারে দরকার নেই। রাষ্ট্রের সম্প্রসারণ এবং ধসে পড়ার জন্য আপনার কোনও এক্সএমএল নির্বাচকের দরকার নেই। সমস্ত জাভা মাধ্যমে সম্পন্ন করা হয়।
এছাড়াও, কোনও গ্রুপ যখন ডিফল্টরূপে প্রসারিত হয় যা ব্লগ থেকে কোড নিয়ে কাজ করে না সে ক্ষেত্রেও এই পদ্ধতিটি সঠিক সূচকটি প্রদর্শন করে।
getGroupView()
আপনার BaseExpandableListAdapter
প্রয়োগের পদ্ধতিতে ব্যবহৃত হতে বোঝানো হয়েছে । এই উদাহরণ বাস্তবায়ন একবার দেখুন ।
ViewHolder
প্যাটার্নটি ব্যবহার করেন । indicator
ভিউ হোল্ডারের পরিবর্তনশীল নাম।
অন্য একটি উত্তরে যেমন উল্লেখ করা হয়েছে, যেহেতু অ্যান্ড্রয়েড একটি আন-প্রসারিত তালিকা গোষ্ঠীটিকে খালি হিসাবে বিবেচনা করে, তাই এই গোষ্ঠীর বাচ্চা থাকলেও আইকনটি টানা হয় না।
এই লিঙ্কটি আমার জন্য সমস্যার সমাধান করেছে: http://myLivewithandroid.blogspot.com/2011/06/hide-group-indicator- for- empty-groups.html
মূলত আপনাকে ডিফল্ট অঙ্কনযোগ্যকে স্বচ্ছ হিসাবে সেট করতে হবে, ছবিটিকে আপনার গ্রুপ ভিউতে ইমেজভিউ হিসাবে সরিয়ে নিয়ে যেতে হবে এবং আপনার অ্যাডাপ্টারে চিত্রটি টগল করতে হবে।
আপনার কোডে শুধু গ্রুপ তালিকা জন্য কাস্টম 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
এক্সএমএলে
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);
}
}
এটি এক্সএমএল, সেট থেকে অন্য কোনও উপায় হতে পারে android:groupIndicator="@null"
উল্লেখ লিঙ্ক: https://stackoverflow.com/a/5853520/2624806
আপনি আমার সমাধান প্রস্তাব:
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;
}
শুধু মিহির ত্রিবেদী এর উত্তরে উন্নতি করতে চেয়েছি। আপনি এটি 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"/>
আশা করি এটি সাহায্য করবে ... একটি উত্সাহ ছেড়ে যাওয়ার কথা মনে রাখবেন
এটি আমার জন্য নিখুঁতভাবে কাজ করছে এটি ব্যবহার করুন।
<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>
সহজভাবে, আপনি লুকানো গোষ্ঠী শিরোলেখের জন্য উচ্চতা = 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;
}
}
}
গুরুত্বপূর্ণ : লেআউট ফাইলগুলির গোপন ট্যাগ (লুকানো এবং স্বাভাবিক) অবশ্যই আলাদা হতে হবে (উপরে উদাহরণস্বরূপ, লিনিয়ারলআউট এবং রিলেটিভলআউট)
রূপান্তর ভিউ.সেটভিজিবিলিটি (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);
}