I am creating an android application example in which an ExpandableListView is displayed on the left side when the application is in landscape mode. But when the application is running in portrait mode, the ExpandableListView should appear as a PopupWindow when the showpopup button is clicked. How to add ExpandableListView to PopupWindow in Android?
I did some initial research with popupwindow and ExpandableListView. This is the code I tried (for portrait mode)
public class LoginActivity extends Activity
{
private Button btnShowPopUp;
private PopupWindow mpopup;
ExpandableListAdapter adapter;
private ExpandListAdapter ExpAdapter;
private ArrayList<ExpandListGroup> ExpListItems;
private ExpandableListView ExpandList;
@Override
public void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
try
{
btnShowPopUp = (Button) findViewById(R.id.btnShowPopUp);
btnShowPopUp.setOnClickListener(new OnClickListener()
{
public void onClick (View arg0)
{
PopupwithExpndLst();
}
});
}
catch (Exception ex)
{
Log.i("Test", "Error is " + ex.getMessage());
}
}
public void PopupwithExpndLst ()
{
try
{
View popUpView = getLayoutInflater().inflate(R.layout.explist, null);
mpopup = new PopupWindow(popUpView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, true);
mpopup.setAnimationStyle(android.R.style.Animation_Dialog);
mpopup.showAtLocation(popUpView, Gravity.BOTTOM, 0, 0);
ExpandList = (ExpandableListView) findViewById(R.id.lstExpList);
adapter = new MyExpandableListAdapter(this);
ExpandList.setAdapter(adapter);
}
catch (Exception ex)
{
Log.i("Test", "Error is " + ex.getMessage());
}
}
public void PopupwithBtn ()
{
View popUpView = getLayoutInflater().inflate(R.layout.popup, null);
mpopup = new PopupWindow(popUpView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, true);
mpopup.setAnimationStyle(android.R.style.Animation_Dialog);
mpopup.showAtLocation(popUpView, Gravity.BOTTOM, 0, 0);
ExpandList = (ExpandableListView) findViewById(R.id.lstExpList);
adapter = new MyExpandableListAdapter(this);
ExpandList.setAdapter(adapter);
Button btnOk = (Button) popUpView.findViewById(R.id.btnOk);
btnOk.setOnClickListener(new OnClickListener()
{
public void onClick (View v)
{
mpopup.dismiss();
}
});
Button btnCancel = (Button) popUpView.findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(new OnClickListener()
{
public void onClick (View v)
{
mpopup.dismiss();
}
});
}
public ArrayList<ExpandListGroup> SetStandardGroups ()
{
ArrayList<ExpandListGroup> list = new ArrayList<ExpandListGroup>();
ArrayList<ExpandListChild> list2 = new ArrayList<ExpandListChild>();
ExpandListGroup gru1 = new ExpandListGroup();
gru1.setName("Comedy");
ExpandListChild ch1_1 = new ExpandListChild();
ch1_1.setName("A movie");
ch1_1.setTag(null);
list2.add(ch1_1);
ExpandListChild ch1_2 = new ExpandListChild();
ch1_2.setName("An other movie");
ch1_2.setTag(null);
list2.add(ch1_2);
ExpandListChild ch1_3 = new ExpandListChild();
ch1_3.setName("And an other movie");
ch1_3.setTag(null);
list2.add(ch1_3);
gru1.setItems(list2);
list2 = new ArrayList<ExpandListChild>();
ExpandListGroup gru2 = new ExpandListGroup();
gru2.setName("Action");
ExpandListChild ch2_1 = new ExpandListChild();
ch2_1.setName("A movie");
ch2_1.setTag(null);
list2.add(ch2_1);
ExpandListChild ch2_2 = new ExpandListChild();
ch2_2.setName("An other movie");
ch2_2.setTag(null);
list2.add(ch2_2);
ExpandListChild ch2_3 = new ExpandListChild();
ch2_3.setName("And an other movie");
ch2_3.setTag(null);
list2.add(ch2_3);
gru2.setItems(list2);
list.add(gru1);
list.add(gru2);
return list;
}
@Override
public boolean onCreateOptionsMenu (Menu menu)
{
getMenuInflater().inflate(R.menu.activity_login, menu);
return true;
}
}
My ActivityLogin.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnShowPopUp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ShowPopUp" >
</Button>
</LinearLayout>
My explist.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#90FFFFFF"
android:orientation="vertical" >
<TextView
android:id="@+id/txtEmpty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="No items" />
<ExpandableListView
android:id="@+id/lstExpList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:groupIndicator="@null" />
and popup.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#90FFFFFF"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="PopUp Window"
android:textColor="#000000"
android:textStyle="bold" >
</TextView>
<Button
android:id="@+id/btnOk"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Ok" >
</Button>
<Button
android:id="@+id/btnCancel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Cancel" >
</Button>
my ExpendableListAdapter.java
public class ExpandListAdapter extends BaseExpandableListAdapter
{
private Context context;
private ArrayList<ExpandListGroup> groups;
public ExpandListAdapter(Context context, ArrayList<ExpandListGroup> groups)
{
try
{
this.context = context;
this.groups = groups;
}
catch (Exception ex)
{
Log.i("Test", "Error is " + ex.getMessage());
}
}
public void addItem (ExpandListChild item, ExpandListGroup group)
{
if (!groups.contains(group))
{
groups.add(group);
}
int index = groups.indexOf(group);
ArrayList<ExpandListChild> ch = groups.get(index).getItems();
ch.add(item);
groups.get(index).setItems(ch);
}
public Object getChild (int groupPosition, int childPosition)
{
ArrayList<ExpandListChild> chList = groups.get(groupPosition).getItems();
return chList.get(childPosition);
}
public long getChildId (int groupPosition, int childPosition)
{
return childPosition;
}
public View getChildView (int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup parent)
{
ExpandListChild child = (ExpandListChild) getChild(groupPosition, childPosition);
if (view == null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.expandlist_child_item, null);
}
TextView tv = (TextView) view.findViewById(R.id.tvChild);
tv.setText(child.getName().toString());
tv.setTag(child.getTag());
return view;
}
public int getChildrenCount (int groupPosition)
{
ArrayList<ExpandListChild> chList = groups.get(groupPosition).getItems();
return chList.size();
}
public Object getGroup (int groupPosition)
{
return groups.get(groupPosition);
}
public int getGroupCount ()
{
return groups.size();
}
public long getGroupId (int groupPosition)
{
return groupPosition;
}
public View getGroupView (int groupPosition, boolean isLastChild, View view, ViewGroup parent)
{
ExpandListGroup group = (ExpandListGroup) getGroup(groupPosition);
if (view == null)
{
LayoutInflater inf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
view = inf.inflate(R.layout.expamdlist_group_item, null);
}
TextView tv = (TextView) view.findViewById(R.id.tvGroup);
tv.setText(group.getName());
return view;
}
public boolean hasStableIds ()
{
return true;
}
public boolean isChildSelectable (int groupPosition, int childPosition)
{
return true;
}
}
In the LoginActivity class, if I use the PopupwithBtn () function inside the onclick method for btnShowpopup, the popup works as expected, but when I use PopupwithExpndLst ().
PopupwithExpndLst(), , .
, .
Bimzee