选择CardView在RecyclerView中的位置并在RecyclerView中更改片段

时间:2018-09-27 07:38:05

标签: android android-fragments android-recyclerview

*简单的部分*

此刻,我已经在RecyclerView中设置了CardView。

我需要做的是将第二张卡片视图的颜色更改为黄色,而第三张卡片视图的颜色更改为红色(此刻它们均为绿色)。我也希望第一张卡片视图保持绿色。

*硬部件*

每当我单击RecyclerView中的CardView之一时,我还需要能够切换到另一个片段。所以基本上是在我的RecyclerAdapter中切换片段。

我的RecyclerAdapter Java类如下:

先谢谢!!

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {

Fragment fragment;

private DataTabelFragment dataTabelFragment;

private static String[] title = new String[]{"D42DB2", "B42DC6", "CURRENTLY NOT AVAILABLE"};

private static String[] beskrivelse = new String[]{"Temperatur & Humdity Sensorer", "Light Sensorer", ""};


@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

    System.out.println( "DU ER KOMMET SÅ LANGT HABEBEEEEEEEEE" );

    View view = LayoutInflater.from( viewGroup.getContext() ).inflate( R.layout.fragment_card_view_tabel, viewGroup, false );

    viewGroup.setOnClickListener( new View.OnClickListener() {

        @Override
        public void onClick(View view) {

        }
    } );

    return new RecyclerViewHolder( view );
}

@Override
public void onBindViewHolder(RecyclerViewHolder recyclerViewHolder, int i) {

    recyclerViewHolder.mBeskrivelse.setText( beskrivelse[i] );
    recyclerViewHolder.mTitle.setText( title[i] );

    recyclerViewHolder.cardView.setCardBackgroundColor( Color.parseColor( "#FFCE54" ) );


    //recyclerViewHolder.cardView.setCardBackgroundColor( Color.parseColor( "#FFCE54" ) );

}

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

class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private TextView mBeskrivelse;
    private TextView mTitle;
    private CardView cardView;

    public RecyclerViewHolder(View itemView) {
        super( itemView );

        mBeskrivelse = (TextView) itemView.findViewById( R.id.item_beskrivelse );
        mTitle = (TextView) itemView.findViewById( R.id.item_title );
        cardView = (CardView) itemView.findViewById( R.id.card_view );
        itemView.setOnClickListener( this );

    }

    @Override
    public void onClick(View v) {

        Toast.makeText( itemView.getContext(), "HEJ DU HAR TRYKKET PÅ KNAP", Toast.LENGTH_LONG ).show();

        //((FragmentActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction().replace( R.id.recycler_view, new DataTabelFragment() ).commit();


    }

  }

}

2 个答案:

答案 0 :(得分:0)

简短说明:

  1. 如果只想更改前3种cardview颜色,则只需检查位置即可完成工作。但是我想您希望对此进行更多的自定义,因此您必须使用@Override getItemViewtype适配器的方法,并在此基础上在`Recyclerview中显示不同的视图。 Sample

  2. 现在,关于您要从每个cardview中显示的片段。。我看到您正在尝试在适配器中执行此操作。我建议您从正确实施的活动/片段[RecyclerView Listener](https://antonioleiva.com/recyclerview-listener/)中进行操作。除此之外,您将要使用add()方法而不是replace进行片段交易(这样,您的列表仍会显示在添加的片段下方,并且您无需膨胀或重新开始片段。

答案 1 :(得分:0)

对于第一部分,您可以执行与标题相同的操作。添加与此类似的数组。

private static String[] colors = new String[]{"#FFCE54", "#57ad48", "#c93e3c"};

然后像这样访问它。

recyclerViewHolder.cardView.setCardBackgroundColor( Color.parseColor( colors[i] ) );

您还可以像这样在onBindViewHolder中设置onClickListener。

recyclerViewHolder.setOnClickListener(new View.OnClickListener() {       
    @Override
    public void onClick(View view) {
        getActivity().getSupportFragmentManager().beginTransaction().replace( R.id.recycler_view, new DataTabelFragment() ).commit();
    }
});

或将其作为onItemTouchListener添加到您的RecyclerView。

mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
          getActivity().getSupportFragmentManager().beginTransaction().replace( R.id.recycler_view, new DataTabelFragment() ).commit();
        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    });