Android 单击项目时,RecyclerView将更改为其他布局

Android 单击项目时,RecyclerView将更改为其他布局,android,android-recyclerview,android-cardview,Android,Android Recyclerview,Android Cardview,根据我以前的经验,我在我的RecyclerView中的onClick on CardView有一个问题。当用另一个卡片布局xml单击CardView时,我需要更改卡片布局。我明白这一点,但这不是工作。我不太明白如何在代码中再次声明一个CardView布局。这是我的代码: Adapter.Java public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public static fin

根据我以前的经验,我在我的RecyclerView中的onClick on CardView有一个问题。当用另一个卡片布局xml单击CardView时,我需要更改卡片布局。我明白这一点,但这不是工作。我不太明白如何在代码中再次声明一个CardView布局。这是我的代码:

Adapter.Java

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

public static final int view1 = 0;
public static final int view2 = 1;

private static OnRecyclerViewItemClickedListener recyclerViewItemClickedListener;

public void setOnRecyclerViewClickedListener (OnRecyclerViewItemClickedListener l) {
    recyclerViewItemClickedListener = l;
}


public interface OnRecyclerViewItemClickedListener {
    void OnRecyclerViewItemClicked(int position);
    void OnRecyclerViewItemBind(ViewHolder holder, int position);
    int OnRecyclerViewItemCount();

}

public Adapter() {
    super();
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View itemView;
    if (viewType == view1) {
        itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.table_item_empty, parent, false);
        return new ViewHolder(itemView);
    }
    else if (viewType == view2) {
        itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.table_item_occupied, parent, false);
        return new ViewHolder2(itemView);
    }
    return null;
}


public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    recyclerViewItemClickedListener.OnRecyclerViewItemBind((ViewHolder) holder, position);
}


@Override
public int getItemCount() {
    return recyclerViewItemClickedListener.OnRecyclerViewItemCount();
}


public int getItemViewType() { return recyclerViewItemClickedListener.getItemViewType(); }


public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public TextView txt_no_table;
    public TextView txt_no_table_occ;
    public TextView txt_pax_occ;
    public TextView txt_guest_name_occ;
    public TextView txt_bill_occ;
    public Chronometer txt_time_occ;
    public CardView cardview_table;
    public LinearLayout title_layout;

    public ViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);

        txt_no_table = (TextView) itemView.findViewById(R.id.txt_no_table_empty);
        txt_no_table_occ = (TextView) itemView.findViewById(R.id.txt_no_table);
        txt_pax_occ = (TextView) itemView.findViewById(R.id.txt_pax);
        txt_guest_name_occ = (TextView)itemView.findViewById(R.id.txt_guestname);
        txt_bill_occ = (TextView) itemView.findViewById(R.id.txt_bill);
        txt_time_occ = (Chronometer) itemView.findViewById(R.id.txt_time);
        cardview_table = (CardView) itemView.findViewById(R.id.table_card_empty);
        title_layout = (LinearLayout) itemView.findViewById(R.id.table_ll1);

        }

    @Override
    public void onClick(View itemView) {
        recyclerViewItemClickedListener.OnRecyclerViewItemClicked(getAdapterPosition());
    }
}

public class ViewHolder2 extends RecyclerView.ViewHolder implements View.OnClickListener {
    public TextView txt_no_table2;
    public TextView txt_pax2;
    public TextView txt_guest_name2;
    public TextView txt_bill2;
    public TextView txt_time2;

    public ViewHolder2 (View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);

        txt_no_table2 = (TextView) itemView.findViewById(R.id.txt_no_table_);
        txt_pax2 = (TextView) itemView.findViewById(R.id.txt_pax_);
        txt_guest_name2 = (TextView)itemView.findViewById(R.id.txt_guestname_);
        txt_bill2 = (TextView) itemView.findViewById(R.id.txt_bill_);
        txt_time2 = (TextView) itemView.findViewById(R.id.txt_time_);
    }
        @Override
        public void onClick(View itemView) {
            recyclerViewItemClickedListener.OnRecyclerViewItemClicked(getAdapterPosition());
        }
}
}
My table_item_empty.xml(第一个布局):


我的代码在单击时使第一个布局消失,但我想显示/更改另一个卡片布局

这是CardView1,看起来像:

另一个CardView xml(CardView2):

编辑:

我骗了它。现在,当单击一个或多个项目时,它会将视图更改为如下所示:

但我仍然想在单击项时尝试使用两个不同的layout.xml视图。这是因为我在一个布局中只“玩”了元素中的“不可见”和“可见”,而不是xml

[已编辑]:

我仍在尝试使用两个布局视图创建我的RecyclerView。我像上面那样改进了适配器。我明白了,但我有一个小问题。在我的活动中,我使用holder(例如:holder.txt_time…)从ViewHolder1调用我的itemView,就像上面的代码一样。我想知道如何在活动中呼叫我的第二个持有者(ViewHolder2)?我试图通过添加一些监听器来编写硬代码,但这对我不起作用:(

也许有人可以帮助并指导我修改代码。每个答案都会对我有帮助。谢谢

adapter.setOnRecyclerViewClickedListener(new Adapter.OnRecyclerViewItemClickedListener() {

        @Override
        public void OnRecyclerViewItemClicked(int position)  {
            try {
                JSONObject currTable = filteredTableList.getJSONObject(position);

                if (currTable.has("selected")) {
                    currTable.put("selected", !currTable.getBoolean("selected"));
                } else {
                    currTable.put("selected",true);
                }

                adapter.notifyItemChanged(position);
            } catch (JSONException e) {
                e.printStackTrace();
            }

            try
            {
                Toast.makeText(TableActivity.this, filteredTableList.getJSONObject(position).getString("tischnr"), Toast.LENGTH_SHORT).show();
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void OnRecyclerViewItemBind(Adapter.ViewHolder holder, int position) {
            try {
                JSONObject currTable = filteredTableList.getJSONObject(position);

                holder.txt_no_table.setText(currTable.getString("tischnr"));
                holder.txt_guest_name_occ.setText("");
                holder.txt_pax_occ.setText("");
                holder.txt_bill_occ.setText("");

                int queasy33Index = ProgramMethod.getJSONArrayIndex(queasy33List,"number2", currTable.getInt("tischnr"));

                if (queasy33Index >= 0) {
                    holder.txt_guest_name_occ.setText(queasy33List.getJSONObject(queasy33Index).getString("char2"));
                    holder.txt_pax_occ.setText(queasy33List.getJSONObject(queasy33Index).getString("number3"));
                }

                if (currTable.has("selected") && currTable.getBoolean("selected")) {
                    holder.itemView.setBackgroundResource(R.color.colorRedTableOcc);
                    holder.txt_no_table.setVisibility(View.INVISIBLE);
                    holder.txt_no_table_occ.setVisibility(View.VISIBLE);
                    holder.txt_bill_occ.setVisibility(View.VISIBLE);
                    holder.txt_pax_occ.setVisibility(View.VISIBLE);
                    holder.txt_time_occ.setVisibility(View.VISIBLE);
                    holder.txt_guest_name_occ.setVisibility(View.VISIBLE);

                } else {
                    holder.itemView.setBackgroundResource(R.color.colorTableGreen);
                    holder.txt_no_table.setVisibility(View.VISIBLE);
                    holder.txt_no_table_occ.setVisibility(View.INVISIBLE);
                    holder.txt_bill_occ.setVisibility(View.INVISIBLE);
                    holder.txt_pax_occ.setVisibility(View.INVISIBLE);
                    holder.txt_time_occ.setVisibility(View.INVISIBLE);
                    holder.txt_guest_name_occ.setVisibility(View.INVISIBLE);
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public int OnRecyclerViewItemCount() {
            return filteredTableList.length();
        }
    });
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/table_card_empty"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   app:cardBackgroundColor="@color/colorTableGreen"
   app:cardCornerRadius="15dp"
   app:cardElevation="5dp"
   android:layout_margin="3dp">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="2dp"
    android:gravity="center">


    <RelativeLayout
        android:id="@+id/table_rl1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/table_ll1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true">

            <TextView
                android:id="@+id/txt_no_table"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:textSize="15dp"
                android:gravity="center"
                android:textColor="@color/colorWhite"
                android:visibility="invisible"/>
        </LinearLayout>

        <TextView
            android:id="@+id/txt_pax"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="1dp"
            android:text="5"
            android:textSize="10dp"
            android:textColor="@color/colorWhite"
            android:drawableLeft="@drawable/ic_airline_seat_recline_normal_white_18dp"
            android:visibility="invisible"/>

        <TextView
            android:id="@+id/txt_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="10:00"
            android:textSize="10dp"
            android:textColor="@color/colorWhite"
            android:drawableLeft="@drawable/ic_access_time_white_18dp"
            android:layout_alignParentTop="true"
            android:layout_toEndOf="@+id/txt_pax"
            android:layout_marginStart="2dp"
            android:visibility="invisible"/>
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/table_rl2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/table_rl1">

        <TextView
            android:id="@+id/txt_guestname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="1dp"
            android:text="Budi"
            android:textSize="10dp"
            android:textColor="@color/colorWhite"
           android:drawableLeft="@drawable/ic_supervisor_account_white_18dp"
            android:visibility="invisible"/>

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/table_rl2">

        <TextView
            android:id="@+id/txt_bill"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="10000"
            android:drawableLeft="@drawable/ic_attach_money_white_18dp"
            android:textSize="10dp"
            android:textColor="@color/colorWhite"
            android:layout_marginStart="1dp"
            android:visibility="invisible"/>
    </RelativeLayout>

    <TextView
        android:id="@+id/txt_no_table_empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="12"
        android:textSize="25dp"
        android:gravity="center_vertical|center_horizontal"
        android:textColor="@color/colorWhite"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>
</android.support.v7.widget.CardView>