'How can we add an ExpandableListView inside a popupwindow in android?
I am creating a sample android application in which an ExpandableListView is shown on the left side when the application is in Landscape mode. But when the application runs in portrait mode the ExpandableListView must shown as a PopupWindow when the showpopup button is clicked. How can we add an ExpandableListView inside a PopupWindow in Android?
I did some initial Research with popupwindow and ExpandableListView. This is the code I tried (for the 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();
//PopupwithBtn();
}
});
}
catch (Exception ex)
{
Log.i("Test", "Error is " + ex.getMessage());
}
}
public void PopupwithExpndLst ()
{
try
{
View popUpView = getLayoutInflater().inflate(R.layout.explist, null); // inflating popup layout
mpopup = new PopupWindow(popUpView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, true); // Creation of popup
mpopup.setAnimationStyle(android.R.style.Animation_Dialog);
mpopup.showAtLocation(popUpView, Gravity.BOTTOM, 0, 0); // Displaying popup
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); // inflating popup layout
mpopup = new PopupWindow(popUpView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, true); // Creation of popup
mpopup.setAnimationStyle(android.R.style.Animation_Dialog);
mpopup.showAtLocation(popUpView, Gravity.BOTTOM, 0, 0); // Displaying popup
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(); // dismissing the popup
}
});
Button btnCancel = (Button) popUpView.findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(new OnClickListener()
{
public void onClick (View v)
{
mpopup.dismiss(); // dismissing the popup
}
});
}
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 is
<?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 is
<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 is
<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 is
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)
{
// TODO Auto-generated method stub
ArrayList<ExpandListChild> chList = groups.get(groupPosition).getItems();
return chList.size();
}
public Object getGroup (int groupPosition)
{
// TODO Auto-generated method stub
return groups.get(groupPosition);
}
public int getGroupCount ()
{
// TODO Auto-generated method stub
return groups.size();
}
public long getGroupId (int groupPosition)
{
// TODO Auto-generated method stub
return groupPosition;
}
public View getGroupView (int groupPosition, boolean isLastChild, View view, ViewGroup parent)
{
// TODO Auto-generated method stub
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 ()
{
// TODO Auto-generated method stub
return true;
}
public boolean isChildSelectable (int groupPosition, int childPosition)
{
// TODO Auto-generated method stub
return true;
}
}
In the LoginActivity class, if I use PopupwithBtn() function inside onclick method of btnShowpopup, the popup is working as expected but when i use PopupwithExpndLst().
In PopupwithExpndLst() method when i try to set the adapter for the expendable list its showing null pointer exception. Please help me to solve the issue.
Thanks in advance Bimzee
Solution 1:[1]
Ok i Just figured out the problem
I must have used
(ExpandableListView) mpopup.getContentView().findViewById(R.id.lstExpList)
instead of
(ExpandableListView)findViewById(R.id.lstExpList)
inside PopupwithExpndLst() method
Hope this will be helpful to some one
Thank you
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Bimzee |