如何将EditText和Send Button放入Fragment的Recyclerview中?

时间:2018-12-20 12:43:40

标签: android android-xml

我有一个包含三个片段的活动。有没有一种方法可以在片段之一上添加聊天功能。详细内容如下。让我知道是否还有其他要求。
活动的XML文件在下面列出。

<android.support.design.widget.CoordinatorLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    .........
    <android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
......
</android.support.design.widget.CoordinatorLayout>

以下列出了用于扩展RecyclerView的片段XML:-

<android.support.v7.widget.RecyclerView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/messageList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical"
    android:layout_below ="@id/appbar"
 >
</android.support.v7.widget.RecyclerView>

我的两个片段工作正常。对于第三个Fragment,我连接了适配器以列出聊天消息,但工作正常,但是我无法附加Edittext并发送用于聊天功能的按钮,我认为这应该是在适配器之外,但在Fragment内部。有人可以建议如何实现吗?我已经花了几个小时才知道如何实现这一目标?预先感谢您的帮助。

下面是第三个Fragment的

XML。有没有一种方法可以在同一片段中显示EditText,Send Button和Chatlist?聊天列表不是问题。真正的问题是设置EditText和Send Button。

 <RelativeLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

<RelativeLayout
    android:id="@+id/newMessageContainer"
    android:orientation="horizontal"
    android:layout_alignParentBottom="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
    android:id="@+id/newMessage"
    android:focusedByDefault="false"
    android:layout_alignParentStart="true"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@+id/send"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
    <Button
    android:id="@+id/send"
    android:text="Send"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/messageList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:layout_below ="@id/appbar"
android:layout_above="@id/newMessageContainer"
    />
    </RelativeLayout>

编辑
请参阅我已实现的Fragment.java文件。我可能由于ConstraintLayout而出现错误

  public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup 
   container, Bundle savedInstanceState) {
    RecyclerView rv = (RecyclerView) inflater.inflate(
            R.layout.fragment_cheese_list, container, false);
    setupRecyclerView(rv);
    return rv;
    }

private void setupRecyclerView(RecyclerView recyclerView) {
    recyclerView.setLayoutManager(new 
    LinearLayoutManager(recyclerView.getContext()));
    recyclerView.setAdapter(new 
    SimpleStringRecyclerViewAdapter(getActivity(),
        getRandomSublist(Cheeses.sCheeseStrings, 30)));
}

2 个答案:

答案 0 :(得分:2)

这是您的代码已更新。只是这样的设计,您传递的方式是错误的,下面有一个链接,您可以在其中学习编写android应用程序的代码,并且非常受开发人员维护。

像这样设置片段并通过我通过的布局

private RecyclerView recyclerView;
private MyAdapter myAdapter;

@Override
    public View onCreate(Bundle savedInstanceState){
myAdapter=new MyAdpter();
}


@Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup 
       container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_sample, parentViewGroup, false);
recyclerView= rootView.findViewById(R.id.recyelerview);
 LinearLayoutManager layoutManager = new LinearLayoutManager(c);
    recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(myAdapter);
    return rootView;
        }

    private void setupRecyclerView(RecyclerView recyclerView) {
        recyclerView.setLayoutManager(new 
        LinearLayoutManager(recyclerView.getContext()));
        recyclerView.setAdapter(new 
        SimpleStringRecyclerViewAdapter(getActivity(),
            getRandomSublist(Cheeses.sCheeseStrings, 30)));
    }

如果您是新手,请按照此步骤操作

https://guides.codepath.com/android/Using-the-RecyclerView

答案 1 :(得分:0)

尝试此操作对我来说还可以单击按钮。并将按钮点击代码保留在片段上,而不是在recyclerview中

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="88dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="@+id/editText"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/editText"
        app:layout_constraintTop_toTopOf="@+id/editText" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/button"
        app:layout_constraintStart_toStartOf="parent" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>