Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:定制ExpandableListView_Android_Android Listview_Expandablelistview_Baseadapter - Fatal编程技术网

android:定制ExpandableListView

android:定制ExpandableListView,android,android-listview,expandablelistview,baseadapter,Android,Android Listview,Expandablelistview,Baseadapter,我正试图通过修改我找到的一些代码来定制expandableListView。这将调用自定义适配器,并为列表视图膨胀所需的行 我的问题是:我需要将它与其他布局组件一起使用,因此我需要调用setContentView,然后在需要的地方放大listView。我所有的尝试都以应用程序崩溃告终,有人能告诉我如何调整下面的代码以在布局中工作吗 主要活动: public class MainActivity extends ExpandableListActivity implements OnCh

我正试图通过修改我找到的一些代码来定制expandableListView。这将调用自定义适配器,并为列表视图膨胀所需的行

我的问题是:我需要将它与其他布局组件一起使用,因此我需要调用setContentView,然后在需要的地方放大listView。我所有的尝试都以应用程序崩溃告终,有人能告诉我如何调整下面的代码以在布局中工作吗

主要活动:

 public class MainActivity extends ExpandableListActivity implements
    OnChildClickListener {
private static final String[] Groups = { "G1", "G2",
        "G3", "G4" };
private static final String[] Services = { "Service1",
        "Service2", "Service3", "Service4", "Service5",
        "Service6" };
private static final String[] Test = { "Test1", "Test2",
    "Test3", "Test4" };
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    ExpandableListView expandbleLis = getExpandableListView();
    expandbleLis.setDividerHeight(2);
    expandbleLis.setGroupIndicator(null);
    expandbleLis.setClickable(true);

    setGroupData();
    setChildGroupData();

    NewAdapter mNewAdapter = new NewAdapter(groupItem, childItem);
    mNewAdapter
            .setInflater(
                    (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE),
                    this);
    expandbleLis.setAdapter(mNewAdapter);
    expandbleLis.setOnChildClickListener(this);
}

public void setGroupData() {
    for (int i = 0; i < 4; i++) {
        groupItem.add(Groups[i]);
    }
}

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

public void setChildGroupData() {
    /**
     * Add Data For Services
     */
    ArrayList<String> child = new ArrayList<String>();
    for (int i = 0; i < 6; i++) {
        child.add(Services[i]);
    }
    childItem.add(child);

    /**
     * Add Data For Test
     */
    child = new ArrayList<String>();
    for (int i = 0; i < 4; i++) {
        child.add(Test[i]);
    }
    childItem.add(child);
    /**
     * 
     */
    child = new ArrayList<String>();
    child.add("Dummy Text");
    child.add("Dummy Text");
    child.add("Dummy Text");
    child.add("Dummy Text");
    childItem.add(child);
    /**
     * 
     */
    child = new ArrayList<String>();
    child.add("Dummy Text");
    child.add("Dummy Text");
    child.add("Dummy Text");
    child.add("Dummy Text");
    childItem.add(child);
}

@Override
public boolean onChildClick(ExpandableListView parent, View v,
        int groupPosition, int childPosition, long id) {
    Toast.makeText(MainActivity.this, "Clicked On Child",
            Toast.LENGTH_SHORT).show();
    return true;
}
     }
public类MainActivity扩展了ExpandableListActivity实现
OnChildClickListener{
私有静态最终字符串[]组={“G1”,“G2”,
“G3”、“G4”};
私有静态最终字符串[]Services={“Service1”,
“服务2”、“服务3”、“服务4”、“服务5”,
“服务6”};
私有静态最终字符串[]Test={“Test1”、“Test2”,
“Test3”、“Test4”};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ExpandableListView expandbleLis=getExpandableListView();
可膨胀的;可膨胀的;可膨胀的;可膨胀的;
expandbleLis.setGroupIndicator(空);
expandbleLis.setClickable(真);
setGroupData();
setChildGroupData();
NewAdapter mNewAdapter=新的NewAdapter(groupItem,childItem);
mNewAdapter
.充气机(
(LayoutFlater)getSystemService(上下文布局\充气器\服务),
这),;
expandbleLis.setAdapter(mNewAdapter);
expandbleLis.setOnChildClickListener(这个);
}
public void setGroupData(){
对于(int i=0;i<4;i++){
添加(组[i]);
}
}
ArrayList groupItem=新的ArrayList();
ArrayList childItem=新的ArrayList();
public void setChildGroupData(){
/**
*为服务添加数据
*/
ArrayList子项=新的ArrayList();
对于(int i=0;i<6;i++){
添加(服务[i]);
}
添加(子项);
/**
*为测试添加数据
*/
child=newarraylist();
对于(int i=0;i<4;i++){
添加(测试[i]);
}
添加(子项);
/**
* 
*/
child=newarraylist();
添加(“虚拟文本”);
添加(“虚拟文本”);
添加(“虚拟文本”);
添加(“虚拟文本”);
添加(子项);
/**
* 
*/
child=newarraylist();
添加(“虚拟文本”);
添加(“虚拟文本”);
添加(“虚拟文本”);
添加(“虚拟文本”);
添加(子项);
}
@凌驾
公共布尔onChildClick(ExpandableListView父视图,视图v,
int groupPosition、int childPosition、long id){
Toast.makeText(MainActivity.this,“单击子对象”,
吐司。长度(短)。show();
返回true;
}
}
适配器类:

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

@SuppressWarnings("unchecked")
@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));
    convertView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(activity, tempChild.get(childPosition),
                    Toast.LENGTH_SHORT).show();
        }
    });
    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(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    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 false;
}
公共类NewAdapter扩展了BaseExpandableListAdapter{
公共ArrayList groupItem,tempChild;
public ArrayList childItem=new ArrayList();
公共布局更扁平,更扁平;
公共活动;
public NewAdapter(ArrayList grList,ArrayList childItem){
groupItem=grList;
this.Childtem=childItem;
}
公共空间设置充气机(LayoutInflater mInflater,活动法){
this.minflater=minflater;
活动=行动;
}
@凌驾
公共对象getChild(int-groupPosition,int-childPosition){
返回null;
}
@凌驾
公共长getChildId(int-groupPosition,int-childPosition){
返回0;
}
@抑制警告(“未选中”)
@凌驾
公共视图getChildView(int groupPosition,final int childPosition,
布尔值isLastChild、视图转换视图、视图组父级){
tempChild=(ArrayList)Childtem.get(groupPosition);
TextView text=null;
if(convertView==null){
convertView=minflater.inflate(R.layout.childrow,null);
}
text=(TextView)convertView.findViewById(R.id.textView1);
setText(tempChild.get(childPosition));
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(活动,tempChild.get(childPosition),
吐司。长度(短)。show();
}
});
返回视图;
}
@凌驾
公共整数getChildrenCount(整数组位置){
return((ArrayList)Childtem.get(groupPosition)).size();
}
@凌驾
公共对象getGroup(int-groupPosition){
返回null;
}
@凌驾
public int getGroupCount(){
返回groupItem.size();
}
@凌驾
公共void-ongroupposition(int-groupPosition){
super.ongroupposition(groupPosition);
}
@凌驾
已扩展的公共组(int-groupPosition){
super.onGroupExpanded(groupPosition);
}
@凌驾
公共长getGroupId(int-groupPosition){
返回0;
}
@凌驾
公共视图getGroupView(int-groupPosition,布尔值isExpanded,
视图(视图、视图组父级){
if(convertView==null){
convertView=minflater.flate(R.layout.grouprow,null);
}
setText(groupItem.get(groupPosition));
((CheckedTextView)convertView).setChecked(isExpanded);
返回视图;
}
@凌驾
公共布尔表ID(){
返回false;
}
@凌驾
公共布尔值isChildSelectable(int-groupPosition,int-childPosition){
返回false;
}

您必须调用
setContentView
传递一个布局,该布局包含一个id为
@android:id/list的
ExpandableListView
然后,您可以通过调用
getExpandableListView()

来获取此
ExpandableListView

顺便说一句,因为您可以通过XML自定义
ExpandableListView
,所以不必调用此方法,只需使用
setListAdapter()

您的活动不必实现
OnChildClickListener
并调用
setOnChildClickListener
,您只需覆盖
ExpandableListActivity的方法
onChildClick(ExpandableListView父项、视图v、int-groupPosition、int-childPosition、long-id)