Android TextView不显示带有RecycleView的内部LinearLayout

Android TextView不显示带有RecycleView的内部LinearLayout,android,android-recyclerview,android-cardview,Android,Android Recyclerview,Android Cardview,我刚开始使用安卓系统,我遇到了一个问题。我有一个带有训练列表的回收器视图,在这个视图中,我想使标题在一个静态的位置,不管滚动。但是,标题或文本视图在回收器视图上方的线性布局中不可见。 我不知道如何解决我的问题,有人有什么解决办法或想法吗? 下面我介绍代码的各个元素 我的回收者观点: <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"

我刚开始使用安卓系统,我遇到了一个问题。我有一个带有训练列表的回收器视图,在这个视图中,我想使标题在一个静态的位置,不管滚动。但是,标题或文本视图在回收器视图上方的线性布局中不可见。 我不知道如何解决我的问题,有人有什么解决办法或想法吗? 下面我介绍代码的各个元素

我的回收者观点:

 <android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/training_recycler"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
我的线性布局示例

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context=".TrainingFragment">


    <TextView
        android:id="@+id/anything"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="40sp"
        android:text="@string/monia"/>

</LinearLayout>
在RecyclerView内部,我有卡片视图,看起来:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_margin="15dp"
    card_view:cardCornerRadius="10dp">


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

        <TextView
            android:id="@+id/info_text"
            android:layout_marginLeft="15dp"
            android:layout_marginBottom="15dp"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:textSize="20sp"/>
    </LinearLayout>

</android.support.v7.widget.CardView>
当我查看“设计”窗口时,我看到了文本视图,但当我打开emulator时,文本视图并没有显示

谢谢你的建议

编辑:

TrainingMaterialFragment.java

public class TrainingMaterialFragment extends Fragment {

    RecyclerView trainingRecycler;
    public TrainingMaterialFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        RecyclerView trainingRecycler = (RecyclerView)inflater.inflate(
                R.layout.fragment_training_material, container, false);
        int userNo = 1;

        String[] nameArray = new String[0];
        int[] idArray= new int[0];
        try {

            SQLiteOpenHelper myFitnessAppDatabaseHelper = new MyFitnessAppDatabaseHelper(inflater.getContext());
            View view = inflater.inflate(R.layout.fragment_training, container, false);

            SQLiteDatabase db = myFitnessAppDatabaseHelper.getReadableDatabase();

            Cursor cursor = db.query("TRAINING_DIARY",
                    new String[]{"TRAINING_NAME", "DATE",
                            "DISTANCE","_id"},
                    "USER = ?",
                    new String[]{Integer.toString(userNo)},
                    null, null, null);
            int count = cursor.getCount();
            nameArray = new String[count];
            idArray=new int[count];

            if (cursor.moveToFirst()) {

                String nameText = cursor.getString(0);
                TextView name = (TextView) view.findViewById(R.id.training_name);
                name.setText(nameText);
                nameArray[0] = nameText;
                idArray[0]=cursor.getInt(3);

                int i = 1;
                while(i < count) {
                    cursor.moveToNext();

                    nameText = cursor.getString(0);
                    nameArray[i] = nameText;
                    idArray[i]=cursor.getInt(3);
                    i++;

                }
            }
            cursor.close();
            db.close();
        } catch (SQLiteException e) {
            Toast toast = Toast.makeText(inflater.getContext(), "Baza danych jest niedostępna", Toast.LENGTH_SHORT);
            toast.show();
        }

        TrainingAdapter adapter =
                new TrainingAdapter(nameArray);
        trainingRecycler.setAdapter(adapter);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        trainingRecycler.setLayoutManager(layoutManager);


        adapter.setListener(new TrainingAdapter.Listener() {
            public void onClick(int position) {

                Intent intent = new Intent(getActivity(), TrainingDetailActivity.class);
                intent.putExtra(TrainingDetailActivity.EXTRA_TRAINING, position);

                getActivity().startActivity(intent);
            }
        });
        return trainingRecycler;           
    }
}
适配器

public class TrainingAdapter extends RecyclerView.Adapter<TrainingAdapter.ViewHolder> {

    private String[] captions;
    private Listener listener;

    public TrainingAdapter(String[] captions){
        this.captions = captions;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        private CardView cardView;
        public ViewHolder(CardView v) {
            super(v);
            cardView = v;
        }
    }
    @Override
    public TrainingAdapter.ViewHolder onCreateViewHolder(
            ViewGroup parent, int viewType){    
        CardView cv = (CardView) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.training_card_view, parent, false);
        return new ViewHolder(cv);
    }
    @Override
    public void onBindViewHolder(ViewHolder holder, final int position){
        CardView cardView = holder.cardView;

        TextView textView = (TextView)cardView.findViewById(R.id.info_text);
        textView.setText(captions[position]);


        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    listener.onClick(position);
                }
            }
        });     
    }

    @Override
    public int getItemCount(){
        return captions.length;
    }

    public static interface Listener {
        public void onClick(int position);
    }

    public void setListener(Listener listener) {
        this.listener = listener;
    }
}

如果我错了,请纠正我,但您没有将回收器放在线性布局中。您的线性布局应如下所示,然后您将能够得到您想要的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".TrainingFragment">


<TextView
    android:id="@+id/anything"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="40sp"
    android:text="@string/monia"/>
<android.support.v7.widget.RecyclerView

    android:id="@+id/training_recycler"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<LinearLayout/>

我在这个项目中也做了同样的事情。 这是指向XML文件的链接 . 以及指向java文件的链接; . 您可以下载整个应用程序并运行,以查看我在RecyclerView上不仅放置了TexView,还放置了button和其他应用程序。请尝试这种方式

正如您在fragment_training.xml中所说的LinearLayout,所以将recylerview放在LinearLayout中

您的fragment_training.xml代码如下所示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".TrainingFragment">


<TextView
android:id="@+id/anything"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="40sp"
android:text="@string/monia"/>

<android.support.v7.widget.RecyclerView
android:id="@+id/training_recycler"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<LinearLayout/>
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
View rootview = inflater.inflate(
            R.layout.fragment_training, container, false);
trainingRecycler = rootview.findViewById(R.id.findViewById);
.....
...
..
return rootview;

然后可以使用rootview找到recylerview

trainingRecycler = rootview.findViewById(R.id.training_recycler);
并确保添加了return rootview

您的OnCreateView方法如下所示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".TrainingFragment">


<TextView
android:id="@+id/anything"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="40sp"
android:text="@string/monia"/>

<android.support.v7.widget.RecyclerView
android:id="@+id/training_recycler"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<LinearLayout/>
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
View rootview = inflater.inflate(
            R.layout.fragment_training, container, false);
trainingRecycler = rootview.findViewById(R.id.findViewById);
.....
...
..
return rootview;

Linearlayout和RecyclerView包含在两个不同的文件中。fragment_training.xml中的LinearLayout和fragment_training_materiala.xml中的RecyclerView。我试着把两者都放到一个像你一样的东西里,得到了错误java.lang.ClassCastException:android.widget.LinearLayout不能被转换到android.support.v7.widget.RecyclerServiceWMore精确的错误直接在这行RecyclerView trainingRecycler=RecycleServiceWinFlater.充气R.layout.fragment\u training\u材料,容器,false;那么请发布您的java文件您在真实设备上试用过吗?是的,它不起作用您可以添加类和适配器文件吗?我编辑帖子并添加类和适配器文件欢迎提供帮助: