我想在android可扩展列表的每个部分显示不同的子项。所以我写了以下几行:

//SmplExpandable.java
package com.bogotobogo.android.smplexpandable;

import android.app.ExpandableListActivity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.HeterogeneousExpandableList;
import android.widget.ImageView;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Demonstrates expandable lists backed by a Simple Map-based adapter
 */
public class SmplExpandable extends ExpandableListActivity implements HeterogeneousExpandableList{


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        List<Map<String, Object>> groupData = new ArrayList<Map<String, Object>>();
        List<List<Map<String, Object>>> childData = new ArrayList<List<Map<String, Object>>>();

            Map<String, Object> curGroupMap = new HashMap<String, Object>();
            curGroupMap = new HashMap<String, Object>();
            curGroupMap.put("Name","Recipe");
            groupData.add(curGroupMap);

            curGroupMap = new HashMap<String, Object>();
            curGroupMap.put("Name","Feedback");
            groupData.add(curGroupMap);

            curGroupMap = new HashMap<String, Object>();
            curGroupMap.put("Name","Images");
            groupData.add(curGroupMap);

            curGroupMap = new HashMap<String, Object>();
            curGroupMap.put("Name","Video");
            groupData.add(curGroupMap);

            List<Map<String, Object>> children = new ArrayList<Map<String, Object>>();
            Map<String, Object> curChildMap = new HashMap<String, Object>();
            curChildMap = new HashMap<String, Object>();

            curChildMap.put("MyRecipe",getResources().getString(R.string.My_Recipe));
            children.add(curChildMap);
            childData.add(children);

            children = new ArrayList<Map<String, Object>>();
            curChildMap = new HashMap<String, Object>();
            curChildMap.put("MyFeedback", getResources().getString(R.string.My_Feedback));
            children.add(curChildMap);
            childData.add(children);

            children = new ArrayList<Map<String, Object>>();
            curChildMap = new HashMap<String, Object>();
            curChildMap.put("MyImage", getResources().getDrawable(R.drawable.icon));
            children.add(curChildMap);
            childData.add(children);

            children = new ArrayList<Map<String, Object>>();
            curChildMap = new HashMap<String, Object>();
            curChildMap.put("MyImage", getResources().getDrawable(R.drawable.icon));
            children.add(curChildMap);

            childData.add(children);

        // Set up our adapter

            setListAdapter( new SimpleExpandableListAdapter(
                    this,
                    groupData,
                    android.R.layout.simple_expandable_list_item_1,
                    new String[] {"Name"},            // the name of the field data
                    new int[] { android.R.id.text1 }, // the text field to populate with the field data
                    childData,
                    0,
                    null,
                    new int[] {}
                )

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


                        final View v = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
                        if (groupPosition == 0)
                        {
                        // Populate your custom view here

                        ((TextView)v.findViewById(R.id.TextView01)).setText( (String) ((Map<String,Object>)getChild(groupPosition, childPosition)).get("MyRecipe") );
                        }

                        else if (groupPosition == 1)
                        {
                        // Populate your custom view here
                            ((TextView)v.findViewById(R.id.TextView02)).setText( (String) ((Map<String,Object>)getChild(groupPosition, childPosition)).get("MyFeedback") );
                        }

                        else if (groupPosition == 2)
                        {
                        // Populate your custom view here
                             ((ImageView)v.findViewById(R.id.ImageView01)).setImageDrawable((Drawable) ((Map<String,Object>)getChild(groupPosition, childPosition)).get("MyImage"));
                        }

                        else if (groupPosition == 3)
                        {
                        // Populate your custom view here
                             ((ImageView)v.findViewById(R.id.ImageView01)).setImageDrawable((Drawable) ((Map<String,Object>)getChild(groupPosition, childPosition)).get("MyImage"));
                        }

                        return v;

                    }

                    @Override
                    public View newChildView(boolean isLastChild, ViewGroup parent) {
                        {

                            return layoutInflater.inflate(R.layout.myrow, null, false);
                        }
                    }
                }

             );
        // Set the width and height of activity.
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.height =400;
        params.width = 400;
        this.getWindow().setAttributes(params);

    }

}

文件myrow.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
      <ImageView android:id="@+id/ImageView01"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content">
   </ImageView>

    <TextView android:id="@+id/TextView01"
     android:layout_width="fill_parent"
     android:background="#FFFFFF"
     android:textColor="#FF0000"
     android:textSize="10px"
     android:layout_height="fill_parent"/>

    <TextView android:id="@+id/TextView02"
     android:layout_width="fill_parent"
     android:background="#FFFFFF"
     android:textColor="#FF0000"
     android:textSize="10px"
     android:layout_height="fill_parent"/>



    <VideoView android:id="@+id/VideoView01"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content">
    </VideoView>

</LinearLayout>

我的问题是,我可以看到所有四个部分的文本和图像,而我只想显示前两个部分的文本和其他两个部分的图像。
有人能告诉我我做错了什么吗?
谢谢,
内哈

最佳答案

你的问题很简单。
你正在放大

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)

适配器的方法。
但是,此膨胀视图同时包含文本视图和图像视图。如果你只想显示一个,你需要隐藏另一个。
 if (groupPosition == 0)
  {
// set your text hide
// HIDE YOUR IMAGE VIEW
  ImageView iv = ...
  iv.setVisibility(View.GONE);
  }

...

 if (groupPosition == 3)
  {
// set your image source
// HIDE YOUR TEXT VIEW
   TextView tv = ...
   t.setVisibility(View.GONE);
  }

这应该可以解决你的问题,你应该能够从这里完成:)

关于android - 如何在Android的可扩展 ListView 的每个部分中添加不同的子级?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4593027/

10-13 02:01