【问题标题】:expandablelistview with custom arraylist dosen't show childlist具有自定义数组列表的可扩展列表视图不显示子列表
【发布时间】:2019-04-23 11:02:51
【问题描述】:

我正在编写一个带有可扩展列表视图和自定义数组列表的应用程序。我的问题是 expandablelistview 没有显示子项,我不知道问题出在哪里。 arrayList 来自我创建的用于在数据库中保存相同数据的类。

我把代码贴在下面:

public class CustomAdapterExpandable extends BaseExpandableListAdapter {

    private Context c;
    private ArrayList<Data> data;
    private FireBaseReadData fireBaseReadData;
    private DatabaseReference databaseReference;
    private Preference preference = new Preference();

    public CustomAdapterExpandable(Context ctx, ArrayList<Data> data) {
        this.c = ctx;
        this.data = data;
    }




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

    @Override
    public int getChildrenCount(int groupPosition) {
        data.get(0).get(groupPosition);
        return data.size();

    }

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

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return data.get(groupPosition).get(childPosition);
    }

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

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

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

    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

        databaseReference = FirebaseDatabase.getInstance().getReference();
        fireBaseReadData = new FireBaseReadData(databaseReference);
        if(convertView == null){
            convertView = LayoutInflater.from(c).inflate(R.layout.mainlayout, parent, false);
        }

        TextView name = (TextView) convertView.findViewById(R.id.TxT_text);
        Button Btn_Reg = (Button) convertView.findViewById(R.id.Btn_ShowDialog);
        final Data data = (Data) this.getGroup(groupPosition);
        name.setText(data.getTournamentName());
        Btn_Reg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ShowDialog(groupPosition);
            }
        });



        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        final Data data = (Data) this.getChild(groupPosition, childPosition);
        if(convertView == null){
            convertView = LayoutInflater.from(c).inflate(R.layout.childlayout, parent, false);
        }

        TextView register = (TextView) convertView.findViewById(R.id.txt_reg);
        TextView players = (TextView) convertView.findViewById(R.id.txt_players);
        register.setText(data.getNumberOfPlayer());
        players.setText(data.getNumberOfPlayer());

        return convertView;
    }

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

}

数据类

public class Data {

    String tournamentName;
    String nameCreator;
    int numberOfPlayer;
    int playerAvailable;
    String name_Player;

    Data(){

    }

    /***********************************************/
    private int getPlayerAvailable() {
        return playerAvailable;
    }

    void setPlayerAvailable(int PlayerAvailable) {
        playerAvailable = PlayerAvailable;
    }
    /***********************************************/
    public int getNumberOfPlayer() {
        return numberOfPlayer;
    }

    void setNumberOfPlayer(int numbPlayer) {
        numberOfPlayer = numbPlayer;
    }
    /***********************************************/
    public String getName_Player() {
        return name_Player;
    }

    void setName_Player(String name_player) {
        name_Player = name_player;
    }
    /***********************************************/
    String getTournamentName() {
        return tournamentName;
    }

    void setTournamentName(String NameTournament) {
        tournamentName = NameTournament;
    }
    /***********************************************/
    String getNameCreator() {
        return nameCreator;
    }

    void setNameCreator(String Name) {
        nameCreator = Name;
    }


    int get(int n){
        return n;
    }
}

感谢您的回答。

【问题讨论】:

  • 试试这个@Override public int getChildrenCount(int groupPosition) { return data.get(0).get(groupPosition).size(); }
  • @abdullahyousry 请将其发布为带有解释的答案。
  • "cannot risolve method .size()" 它是这么说的
  • 可以发数据模型类吗?

标签: android expandablelistview


【解决方案1】:

你没有得到正确的孩子大小试试这个

@Override
public int getChildrenCount(int groupPosition) {
   return groupList.get(groupPosition).getChild().size();
}

团体课

public class Group {

String groupName;
int groupID;
ArrayList<Data>child=new ArrayList<Data>();
public String getGroupName() {
    return groupName;
}

public void setGroupName(String groupName) {
    this.groupName = groupName;
}

public int getGroupID() {
    return groupID;
}

public void setGroupID(int groupID) {
    this.groupID = groupID;
}

public ArrayList<Data> getChild() {
    return child;
}

public void setChild(ArrayList<Data> child) {
    this.child = child;
}
}

然后将 ArrayList Of Groups 传递给您的适配器

【讨论】:

  • data 是自定义的ArrayList,我做不到。
  • "cannot resolve method .size()" 再说一遍
  • 好的,你需要一个模型,它代表一个包含组信息和一个子数组列表的组,在你的情况下,孩子是数据模型,我会更新我的答案给你一个例子
猜你喜欢
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多