Java 可展开列表下的文本视图消失

Java 可展开列表下的文本视图消失,java,android,Java,Android,当ListView的数据列表不多时,可以很好地看到TextView。但当有大量数据且列表填满屏幕时,TextView书面测试就会消失。请看下面的图片 这是代码源代码。 谢谢 MainActivity.java import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Display; import android.view.View; import

当ListView的数据列表不多时,可以很好地看到TextView。但当有大量数据且列表填满屏幕时,TextView书面测试就会消失。请看下面的图片

这是代码源代码。

谢谢

MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.widget.ExpandableListView;
import java.util.ArrayList;

public class MainActivity extends Activity {
    private ExpandableListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Display newDisplay = getWindowManager().getDefaultDisplay();
        int width = newDisplay.getWidth();

        ArrayList<GroupItem> DataList = new ArrayList<>();
        listView = (ExpandableListView)findViewById(R.id.mylist);

        for (int i=1;i<25;i++) {
            GroupItem temp = new GroupItem("A"+i);
            temp.childItems.add(new GroupItem.ChildItem("1","2"));
            temp.childItems.add(new GroupItem.ChildItem("2","3"));
            temp.childItems.add(new GroupItem.ChildItem("4","5"));
            DataList.add(temp);
        }



        ExpandAdapter adapter = new ExpandAdapter(getApplicationContext(), R.layout.group_row, R.layout.activity_child, DataList);
        listView.setIndicatorBounds(width - 50, width); 
        listView.setAdapter(adapter);

    }

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

import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;


public class ExpandAdapter extends BaseExpandableListAdapter {
    private Context context;
    private int groupLayout = 0;
    private int chlidLayout = 0;
    private ArrayList<GroupItem> DataList;
    private LayoutInflater myinf = null;

    public ExpandAdapter(Context context,int groupLay,int chlidLay,ArrayList<GroupItem> DataList){
        this.context = context;
        this.groupLayout = groupLay;
        this.chlidLayout = chlidLay;
        this.DataList = DataList;
        this.myinf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        if(convertView == null){
            convertView = myinf.inflate(this.groupLayout, parent, false);
        }
        TextView groupName = (TextView)convertView.findViewById(R.id.groupName);
        groupName.setText(DataList.get(groupPosition).groupTitle);

        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        if(convertView == null){
            convertView = myinf.inflate(this.chlidLayout, parent, false);
        }
        RecyclerView recyclerView = convertView.findViewById(R.id.recyclerView);
        RecyclerAdapter recyclerAdapter = new RecyclerAdapter(context,DataList.get(groupPosition).childItems);
        LinearLayoutManager mManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
        recyclerView.setLayoutManager(mManager);
        recyclerView.setAdapter(recyclerAdapter);

        return convertView;
    }


    @Override
    public boolean hasStableIds() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return true;
    }
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return DataList.get(groupPosition).childItems.get(childPosition);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return childPosition;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        // TODO Auto-generated method stub
        return 1;
    }

    @Override
    public GroupItem getGroup(int groupPosition) {
        // TODO Auto-generated method stub
        return DataList.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        // TODO Auto-generated method stub
        return DataList.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        // TODO Auto-generated method stub
        return groupPosition;
    }

}
import java.util.ArrayList;
public class GroupItem {
    public String groupTitle;
    public ArrayList<ChildItem> childItems = new ArrayList<>();

    public GroupItem(String groupTitle) {
        this.groupTitle = groupTitle;
    }

    public static class ChildItem {
        String beforePrice;
        String afterPrice;

        public ChildItem(String beforePrice, String afterPrice) {
            this.beforePrice = beforePrice;
            this.afterPrice = afterPrice;
        }
    }
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class RecyclerAdapter extends RecyclerView.Adapter {

    Context context;
    ArrayList<GroupItem.ChildItem> items;

    public RecyclerAdapter(Context context, ArrayList<GroupItem.ChildItem> items) {
        this.context = context;
        this.items = items;
    }

    //뷰id를 참조함
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View itemView = inflater.inflate(R.layout.child_item,parent,false);  
        VH holder = new VH(itemView);

        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        VH vh = (VH)holder; 

        
        GroupItem.ChildItem item = items.get(position);

       
        vh.beforePrice.setText( item.beforePrice );
        vh.afterPrice.setText( item.afterPrice );
    }

    @Override
    public int getItemCount() {
        return items.size();
    }

    class VH extends RecyclerView.ViewHolder{

        TextView beforePrice;
        TextView afterPrice;
        Button btn;

        public VH(@NonNull View itemView) {
            super(itemView);
            beforePrice = itemView.findViewById(R.id.child_item_beforePrice);
            afterPrice = itemView.findViewById(R.id.child_item_afterPrice);
            btn = itemView.findViewById(R.id.btn);

            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(context, items.get(getLayoutPosition()).beforePrice+"\n"+items.get(getLayoutPosition()).afterPrice, Toast.LENGTH_SHORT).show();
                }
            });

        }
    }
}
导入android.app.Activity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.Display;
导入android.view.view;
导入android.widget.ExpandableListView;
导入java.util.ArrayList;
公共类MainActivity扩展了活动{
私有可扩展listView listView;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Display newDisplay=getWindowManager().getDefaultDisplay();
int width=newDisplay.getWidth();
ArrayList DataList=新的ArrayList();
listView=(ExpandableListView)findViewById(R.id.mylist);
对于(int i=1;i
child_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="15dp">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <ExpandableListView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:indicatorRight="?android:attr/expandableListPreferredItemIndicatorRight"
                android:id="@+id/mylist" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TEST"
                android:textSize="20sp"/>

        </LinearLayout>

    </ScrollView>



</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>

<androidx.recyclerview.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:cardCornerRadius="8dp"
    app:contentPaddingTop="4dp"
    android:layout_marginTop="4dp"
    android:layout_marginBottom="4dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp">

    <RelativeLayout
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:padding="15dp">

        <TextView
            android:id="@+id/child_item_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="월간유니콘\nPLUS 31"
            android:textColor="@color/black"
            android:textSize="20sp"
            android:layout_centerHorizontal="true"
            android:gravity="center"/>

        <TextView
            android:id="@+id/child_item_period"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1 개월간 매일 2회"
            android:layout_below="@id/child_item_title"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="15dp"/>

        <LinearLayout
            android:id="@+id/child_item_Linear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/child_item_period"
            android:orientation="vertical"
            android:layout_marginTop="10dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="정기구독"
                android:layout_below="@id/child_item_period"/>

            <!--data-->
            <TextView
                android:id="@+id/child_item_beforePrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="62000원"/>

            <!--data-->
            <TextView
                android:id="@+id/child_item_afterPrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="29000/월"/>
        </LinearLayout>

        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="구매"
            android:layout_toRightOf="@id/child_item_Linear"
            android:layout_below="@id/child_item_period"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="15dp"
            />


    </RelativeLayout>


</androidx.cardview.widget.CardView>
<?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="fill_parent">
    <TextView
        android:id="@+id/childName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25dip"
        android:paddingLeft="40dip"
        />
    <CheckBox
        android:textColor="#111111"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New CheckBox"
        android:id="@+id/checkBox" />
</LinearLayout>
<?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="fill_parent">
    <TextView android:id="@+id/groupName"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:textSize="20dp"
        android:paddingLeft="5px"
        android:textColor = "#FFA500"
        />
</LinearLayout>

group_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="15dp">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <ExpandableListView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:indicatorRight="?android:attr/expandableListPreferredItemIndicatorRight"
                android:id="@+id/mylist" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TEST"
                android:textSize="20sp"/>

        </LinearLayout>

    </ScrollView>



</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>

<androidx.recyclerview.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:cardCornerRadius="8dp"
    app:contentPaddingTop="4dp"
    android:layout_marginTop="4dp"
    android:layout_marginBottom="4dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp">

    <RelativeLayout
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:padding="15dp">

        <TextView
            android:id="@+id/child_item_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="월간유니콘\nPLUS 31"
            android:textColor="@color/black"
            android:textSize="20sp"
            android:layout_centerHorizontal="true"
            android:gravity="center"/>

        <TextView
            android:id="@+id/child_item_period"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1 개월간 매일 2회"
            android:layout_below="@id/child_item_title"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="15dp"/>

        <LinearLayout
            android:id="@+id/child_item_Linear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/child_item_period"
            android:orientation="vertical"
            android:layout_marginTop="10dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="정기구독"
                android:layout_below="@id/child_item_period"/>

            <!--data-->
            <TextView
                android:id="@+id/child_item_beforePrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="62000원"/>

            <!--data-->
            <TextView
                android:id="@+id/child_item_afterPrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="29000/월"/>
        </LinearLayout>

        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="구매"
            android:layout_toRightOf="@id/child_item_Linear"
            android:layout_below="@id/child_item_period"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="15dp"
            />


    </RelativeLayout>


</androidx.cardview.widget.CardView>
<?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="fill_parent">
    <TextView
        android:id="@+id/childName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25dip"
        android:paddingLeft="40dip"
        />
    <CheckBox
        android:textColor="#111111"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New CheckBox"
        android:id="@+id/checkBox" />
</LinearLayout>
<?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="fill_parent">
    <TextView android:id="@+id/groupName"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:textSize="20dp"
        android:paddingLeft="5px"
        android:textColor = "#FFA500"
        />
</LinearLayout>

您已将ExpandableListView高度设置为包裹内容。因此,当元素数量增加时,它会将TextView推到可用屏幕下方。我建议 1.使用ConstraintLayout或RelativeLayout 2.将文本视图粘贴在最底部,然后将可展开列表视图相对于该视图进行排列

否则,将Expandable ListView的高度设置为特定的预定值(非Adviced),它应该可以正常工作