单击项目时,RecyclerView更改为另一个布局

时间:2016-12-23 02:40:20

标签: android android-recyclerview android-cardview

基于我之前的question,我在RecyclerView中的onView on CardView上遇到了问题。当使用另一个卡片布局xml单击CardView时,我需要更改卡片布局。我按照thisthis进行操作但不起作用。我也不太了解如何在我的代码中再次声明一个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());
        }
}
}

我的活动:

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();
        }
    });

我的table_item_empty.xml(第一个布局):

<?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>

应用程序看起来像:

enter image description here

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

这是CardView1看起来像:

enter image description here

另一个CardView xml(CardView2):

enter image description here

已编辑:

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

enter image description here

但是当我点击项目时,我仍然想尝试使用两个不同的layout.xml视图。它的工作因为我只是“玩”。与&#39; INVISIBLE&#39;和&#39; VISIBLE&#39;在一个布局上的元素中,而不是xml。

[已编辑]:

我仍然尝试使用两个布局视图制作我的RecyclerView。我改进了上面的适配器。我关注this,但我遇到了问题。在我的Acivity中,我使用holder(例如:holder.txt_time ....)调用ViewHolder1中的itemView,就像上面的代码一样。我想知道如何在我的Activity中调用我的第二个持有者(ViewHolder2)?我尝试使用添加一些监听器来制作硬代码,但它对我不起作用:(

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

0 个答案:

没有答案