如何从RecyclerView的适配器替换Android中TextView的位置?

如何从RecyclerView的适配器替换Android中TextView的位置?,android,android-layout,android-recyclerview,Android,Android Layout,Android Recyclerview,正在尝试构建聊天机器人,但是如何在RecyclerView的适配器中交替使用TextView。请参见下面的屏幕截图: 如您所见,所有响应当前都与开始对齐,我想将应答从一个人移动到另一个人,从RecyclerView的适配器。以下是适配器的代码: CustomAdapter.class public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.FeedsViewHolder> {

正在尝试构建聊天机器人,但是如何在
RecyclerView
的适配器中交替使用
TextView
。请参见下面的屏幕截图:

如您所见,所有响应当前都与开始对齐,我想将应答从一个人移动到另一个人,从
RecyclerView
的适配器。以下是适配器的代码:

CustomAdapter.class

    public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.FeedsViewHolder>
{



    DataHolder d1 = new DataHolder();

    public  class FeedsViewHolder extends RecyclerView.ViewHolder
    {
        private TextView chat;
        private Typeface face;

        FeedsViewHolder(View itemView)
        {
            super(itemView);

            chat = (TextView)itemView.findViewById(R.id.chatMessage);
            face = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/Roboto-Regular.ttf");
            chat.setTypeface(face);


        }



    }

    private static class DataHolder
    {
        List<Text> feeds;

    }



    CustomAdapter(List<Text> feeds)
    {
        this.d1.feeds = feeds;
    }



    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }


    @Override
    public FeedsViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.chat_message, viewGroup, false);
        FeedsViewHolder pvh = new FeedsViewHolder(v);
        return pvh;
    }



    @Override
    public void onBindViewHolder(FeedsViewHolder feedViewHolder, int i)
    {
        if(d1.feeds.get(i).isMachineOrHuman())
        {
            feedViewHolder.chat.setBackgroundResource(R.drawable.user);
            feedViewHolder.chat.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);
        }

        else
            feedViewHolder.chat.setBackgroundResource(R.drawable.ais);


        feedViewHolder.chat.setText(d1.feeds.get(i).getMessage());

    }

    @Override
    public int getItemCount()
    {

        if(d1.feeds!=null)
        {
            return d1.feeds.size();
        }
        else
        {
            return 0;
        }
    }



}
公共类CustomAdapter扩展了RecyclerView.Adapter { 数据持有者d1=新数据持有者(); 公共类FeedsViewHolder扩展了RecyclerView.ViewHolder { 私人文本视图聊天; 私人字体; FeedsView文件夹(视图项视图) { 超级(项目视图); chat=(TextView)itemView.findViewById(R.id.chatMessage); face=Typeface.createFromAsset(itemView.getContext().getAssets(),“fonts/Roboto Regular.ttf”); chat.setTypeface(face); } } 私有静态类数据持有者 { 列表提要; } CustomAdapter(列表源) { this.d1.feed=feed; } @凌驾 附加ToRecyclerView(RecyclerView RecyclerView)上的公共无效{ super.onAttachedToRecyclerView(recyclerView); } @凌驾 公共FeedsViewHolder onCreateViewHolder(视图组视图组,int i){ 视图v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.chat_消息,viewGroup,false); FEEDSVIEWORLDER pvh=新的FEEDSVIEWORLDER(v); 返回pvh; } @凌驾 BindViewHolder上的公共无效(FeedsViewHolder feedViewHolder,int i) { if(d1.feeds.get(i).isMachineOrHuman()) { feedViewHolder.chat.setBackgroundResource(R.drawable.user); feedViewHolder.chat.setTextAlignment(View.TEXT\u ALIGNMENT\u View\u END); } 其他的 feedViewHolder.chat.setBackgroundResource(R.drawable.ais); feedViewHolder.chat.setText(d1.feeds.get(i.getMessage()); } @凌驾 public int getItemCount() { if(d1.feeds!=null) { 返回d1.feeds.size(); } 其他的 { 返回0; } } } chat_message.xml

<TextView android:id="@+id/chatMessage"
android:layout_width="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android" />

现在,我提出了另一种解决方案,即在
chat\u message.xml
中保留两个
TextView
s,并更改未使用的
TextView
的可见性设置。但我想知道的是,是否可以用一个
TextView
来实现这一点。另外,
TextView
的背景是一个
9-patch-image
,它被分配为适配器的背景资源,因此当我移动
TextView
时,它也不会破坏背景。如有任何想法,将不胜感激。:)

在气泡(9-patch)的父布局下创建子布局,并将重力设置为文本(消息)



1。宽度匹配父项为2的RelativeLayout中的TextView。设置右对齐父布局参数,而不是文本对齐视图结束。。。因此,当我移动文本视图时,它不应该破坏背景。。。嗯??您可以将文本视图包装在支持重力的布局中(例如LinearLayout),并使用gravity.START和gravity.END(或XML格式的布局)
  @Override
    public void onBindViewHolder(FeedsViewHolder feedViewHolder, int i)
    {
        if(d1.feeds.get(i).isMachineOrHuman())
        {
            feedViewHolder.chat.setBackgroundResource(R.drawable.user);
            **feedViewHolder.chat.setGravity(Gravity.RIGHT);** // *Sent Message*
            feedViewHolder.chat.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);
        }

        else {
            feedViewHolder.chat.setBackgroundResource(R.drawable.ais);
          **feedViewHolder.chat.setGravity(Gravity.LEFT);** // *Receive Message*
            feedViewHolder.chat.setText(d1.feeds.get(i).getMessage());

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

<LinearLayout
    android:id="@+id/message_box"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:background="@drawable/message_bubble"
    android:longClickable="true"
    android:minHeight="40dp">

    <TextView
        android:id="@+id/message_body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Put your message"
        android:textColor="@color/black"
        android:textColorLink="@color/black"
        android:textSize="?attr/TextSizeBody"
        android:visibility="visible" />
</LinearLayout>