1

我想用复选框来理想地设置Expanded List View,这是设置的一些东西。扩展列表视图不起作用

但由于某种原因,它不适合我。

我已经尝试了很多不同的教程,并花了很多时间。但他们似乎都以同样的方式结束。它显示在我的活动上,但不会扩展或崩溃。

,这里是我的代码的Settings.XML:

<ExpandableListView 
android:id="@+id/lvExp" 
android:layout_height="match_parent" 
android:layout_width="match_parent"/> 

这里是我的父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="wrap_content" 
android:orientation="vertical" 
android:padding="8dp" 
android:background="#000000"> 


<TextView 
    android:id="@+id/lblListHeader" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="? 
    android:attr/expandableListPreferredItemPaddingLeft" 
    android:textSize="17dp" 
    android:textColor="#f9f93d" /> 

</LinearLayout> 

这里是我的孩子XML代码:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="55dip" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/lblListItem" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="17dip" 
    android:paddingTop="5dp" 
    android:paddingBottom="5dp" 
    android:paddingLeft="? 
    android:attr/expandableListPreferredChildPaddingLeft" /> 

</LinearLayout> 

这里是我的扩展列表适配器

package com.example.edonfreiner.siddur; 

import java.util.HashMap; 
import java.util.List; 

import android.content.Context; 
import android.graphics.Typeface; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.TextView; 

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

private Context _context; 
private List<String> _listDataHeader; // header titles 
// child data in format of header title, child title 
private HashMap<String, List<String>> _listDataChild; 

public ExpandableListAdapter(Context context, List<String> 
listDataHeader, 
          HashMap<String, List<String>> 
listChildData) { 
    this._context = context; 
    this._listDataHeader = listDataHeader; 
    this._listDataChild = listChildData; 
} 

@Override 
public Object getChild(int groupPosition, int childPosititon) { 
    return 
this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .get(childPosititon); 
} 

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

@Override 
public View getChildView(int groupPosition, final int childPosition, 
         boolean isLastChild, View convertView, 
ViewGroup parent) { 

    final String childText = (String) getChild(groupPosition, 
childPosition); 

    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_item, null); 
    } 

    TextView txtListChild = (TextView) convertView 
      .findViewById(R.id.lblListItem); 

    txtListChild.setText(childText); 
    return convertView; 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return 
this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return this._listDataHeader.get(groupPosition); 
} 

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

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

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
         View convertView, ViewGroup parent) { 
    String headerTitle = (String) getGroup(groupPosition); 
    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_group, null); 
    } 

    TextView lblListHeader = (TextView) convertView 
      .findViewById(R.id.lblListHeader); 
    lblListHeader.setTypeface(null, Typeface.BOLD); 
    lblListHeader.setText(headerTitle); 

    return convertView; 
} 

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

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

到目前为止,我甚至可以让这个工作,更不用说把复选框放在里面,我希望更容易。

enter image description here

+0

那么,您是否只在列表中看到父项? getChildrenCount()的大小是多少?此外,我不明白在哪里的复选框。 – Laura

+0

是的我只看到列表中的父项目,我已经上传了一张图片以便您可以看到,但请注意,复选框不是可扩展列表视图的一部分,只是其后的xml复选框。我还没有合并复选框。我想让你知道整个项目,以便你能更好地帮助我,或者我可以通过不同的方式来实现这个想法。 –

+0

感谢您的帮助,问题是视图太小,一切都很好,除非你看不到它。我也设法得到那里的复选框,但是我不能让复选框侦听器工作。这是为什么?另外,有什么方法可以在某些事物打开并关闭时调整视图的大小?谢谢 –

回答

0

我已经意识到,当一个ExpandableListView的孩子可获得焦点(如按钮,复选框),你需要设置(您的孩子元素):

android:focusable="false" 

这是因为这些子元素从你的触摸中窃取焦点,这是为了扩大列表视图。

这原本是我对Android ExpandableListView not expanding这个问题的回答,这似乎帮助了几个人。

EDIT Focusable属性表示插件可以接收焦点是从点击不同(等接收哪些按钮,复选框)

+0

感谢您的帮助@ucsunil,但这并没有把戏。另外,我想我会需要将它设置为true时,我想将复选框放在那里 –

+0

您是否尝试过在TextView上设置它?我相信TextView是可调焦的(因为如果使用不同于接收点击的键盘,可以获得焦点)。 – ucsunil

+0

感谢您的帮助,问题是视图太小,一切都很好,除非你看不到它。我也设法得到那里的复选框,但是我不能让复选框侦听器工作。这是为什么?另外,有什么方法可以在某些事物打开并关闭时调整视图的大小?谢谢 –

0

我认为这可能是2层的问题之一:或者是getChildrenCount方法返回0,无论哪种观点都越来越关注。尝试在父级XML的容器布局中使用此代码:

android:descendantFocusability="blocksDescendants" 
+0

嘿,我记录了这个:'getChildrenCount',它返回7.但是,谢谢 –

+0

感谢您的帮助,问题是视图太小一切都很好,除非你看不到它。我也设法得到那里的复选框,但是我不能让复选框侦听器工作。这是为什么?另外,有什么方法可以在某些事物打开并关闭时调整视图的大小?谢谢 –