【问题标题】:Retrieving ChildItem from ExpandableListView?从 ExpandableListView 检索 ChildItem?
【发布时间】:2013-04-17 09:00:23
【问题描述】:

当用户单击 ExpandableListView 的子项时,我正在尝试检索子项。为此,我的 Activity 和 ListAdapter 类如下..

MainActivity:-

public class MainActivity extends Activity {

    NewAdapter mNewAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ExpandableListView expandbleLis = (ExpandableListView) findViewById(R.id.expandableListView);
        expandbleLis.setDividerHeight(2);
        expandbleLis.setGroupIndicator(null);
        expandbleLis.setClickable(true);

        setGroupData();
        setChildGroupData();

        mNewAdapter = new NewAdapter(groupItem, childItem);
        mNewAdapter
                .setInflater(
                        (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE),
                        this);
        expandbleLis.setAdapter(mNewAdapter);
        expandbleLis.setOnGroupClickListener(new OnGroupClickListener() {

            @Override
            public boolean onGroupClick(ExpandableListView parent, View v,
                    int groupPosition, long id) {
                Toast.makeText(MainActivity.this,
                        "GroupItem Clicked" + groupItem.get(groupPosition),
                        Toast.LENGTH_LONG).show();
                return false;
            }
        });
        expandbleLis.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                Toast.makeText(MainActivity.this, "ChildItem Clicked",
                        Toast.LENGTH_LONG).show();

                return false;
            }
        });

    }

    public void setGroupData() {
        groupItem.add("TechNology");
        groupItem.add("Mobile");
        groupItem.add("Manufacturer");
        groupItem.add("Extras");
    }

    ArrayList<String> groupItem = new ArrayList<String>();
    ArrayList<Object> childItem = new ArrayList<Object>();

    public void setChildGroupData() {
        /**
         * Add Data For TecthNology
         */
        ArrayList<String> child = new ArrayList<String>();
        child.add("Java");
        child.add("Drupal");
        child.add(".Net Framework");
        child.add("PHP");
        childItem.add(child);

        /**
         * Add Data For Mobile
         */
        child = new ArrayList<String>();
        child.add("Android");
        child.add("Window Mobile");
        child.add("iPHone");
        child.add("Blackberry");
        childItem.add(child);
        /**
         * Add Data For Manufacture
         */
        child = new ArrayList<String>();
        child.add("HTC");
        child.add("Apple");
        child.add("Samsung");
        child.add("Nokia");
        childItem.add(child);
        /**
         * Add Data For Extras
         */
        child = new ArrayList<String>();
        child.add("Contact Us");
        child.add("About Us");
        child.add("Location");
        child.add("Root Cause");
        childItem.add(child);
    }

}

ListAdapter:-

public class NewAdapter extends BaseExpandableListAdapter {

    public ArrayList<String> groupItem, tempChild;
    public ArrayList<Object> Childtem = new ArrayList<Object>();
    public LayoutInflater minflater;
    public Activity activity;

    public NewAdapter(ArrayList<String> grList, ArrayList<Object> childItem) {
        groupItem = grList;
        this.Childtem = childItem;
    }

    public void setInflater(LayoutInflater mInflater, Activity act) {
        this.minflater = mInflater;
        activity = act;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return null;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }

    @Override
    public View getChildView(int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        tempChild = (ArrayList<String>) Childtem.get(groupPosition);
        TextView text = null;
        if (convertView == null) {
            convertView = minflater.inflate(R.layout.childrow, null);
        }
        text = (TextView) convertView.findViewById(R.id.textView1);
        text.setText(tempChild.get(childPosition));
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return ((ArrayList<String>) Childtem.get(groupPosition)).size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return null;
    }

    @Override
    public int getGroupCount() {
        return groupItem.size();
    }

    @Override
    public void onGroupCollapsed(int groupPosition) {
        super.onGroupCollapsed(groupPosition);
    }

    @Override
    public void onGroupExpanded(int groupPosition) {
        super.onGroupExpanded(groupPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return 0;
    }

    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        // isExpanded = false;
        if (convertView == null) {
            convertView = minflater.inflate(R.layout.grouprow, null);
        }
        ((CheckedTextView) convertView).setText(groupItem.get(groupPosition));

        ((CheckedTextView) convertView).setChecked(isExpanded);

        return convertView;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

}

我已经用谷歌搜索了this,但没有用,我没有从中获取子项目。请帮忙做这件事。

在尝试了许多可能的解决方案后,我发布了这个,如果你不赞成说可能的解决方案,请尽量帮助我不要投票,然后我会同意..

【问题讨论】:

    标签: android expandablelistview expandablelistadapter


    【解决方案1】:

    多个问题:

    • 需要选择子项才能使点击生效。将适配器的 isChildSelectable() 更改为返回 true

    • 从您的childrow.xmlLinearLayout 中删除android:clickable="true"。 (或者,将点击处理程序添加到 LinearLayout 本身。)

    • 实现 getGroup()getChild() 以返回实际对象,而不是 nullgetGroupId()getChildId() 以返回本地唯一标识符。也就是说,组内的子 ID 需要是唯一的,但它们不需要跨组是唯一的。在您的情况下,将子/组位置作为 id 返回即可。

    【讨论】:

    • 如果是真的也没有得到子项。
    • 那么问题不在于您发布的代码。当复制粘贴到我的环境并添加所需的布局文件时,它适用于我。你的childrow.xml 是什么样的?
    • 那里还有另一个问题。在我的答案中添加了第二个项目符号。
    • 现在正在执行点击,但未检索到所选项目。
    • 不确定你到底是什么意思,但当然你需要实现 getGroup()getChild() 以返回非nullobjects 和 getGroupId()getChildId() 以返回(本地)唯一标识符。
    【解决方案2】:

    在你的ListAdapter

    更改return的值

    public Object getGroup(int groupPosition)

    getGroupId(int groupPosition)

    return groupPosition;

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多