How can we add an ExpandableListView inside a popup in android?

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();
                //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

    <?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)
{
    // 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 the PopupwithBtn () function inside the onclick method for btnShowpopup, the popup works as expected, but when I use PopupwithExpndLst ().

PopupwithExpndLst(), , . , .

Bimzee

+2
1

,

, ,

    (ExpandableListView) mpopup.getContentView().findViewById(R.id.lstExpList)

    (ExpandableListView)findViewById(R.id.lstExpList)

PopupwithExpndLst()

,

+2

Source: https://habr.com/ru/post/1680408/


All Articles