我们如何在Android的popupwindow中添加ExpandableListView? [英] How can we add an ExpandableListView inside a popupwindow in android?

查看:59
本文介绍了我们如何在Android的popupwindow中添加ExpandableListView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个示例android应用程序,当该应用程序处于横向"模式时,其中的ExpandableListView会显示在左侧.但是,当应用程序以纵向模式运行时,单击showpopup按钮时,ExpandableListView必须显示为PopupWindow.我们如何在Android的PopupWindow内添加ExpandableListView?

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?

我使用popupwindow和ExpandableListView做了一些初步研究. 这是我尝试的代码(用于纵向模式)

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;
}

}

我的ActivityLogin.xml是

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>

我的explist.xml是

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是

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>

我的ExpendableListAdapter.java是

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;
}

}

在LoginActivity类中,如果我在btnShowpopup的onclick方法中使用PopupwithBtn()函数,则弹出窗口将按预期工作,但是当我使用PopupwithExpndLst()时.

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().

在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.

先谢谢了 比姆齐

推荐答案

好吧,我刚刚发现了问题

Ok i Just figured out the problem

我一定用过

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

代替

    (ExpandableListView)findViewById(R.id.lstExpList)

内部PopupwithExpndLst()方法

inside PopupwithExpndLst() method

希望这对某些人有帮助

谢谢

这篇关于我们如何在Android的popupwindow中添加ExpandableListView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆