*简单的部分*
此刻,我已经在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();
}
}
}
答案 0 :(得分:0)
简短说明:
如果只想更改前3种cardview
颜色,则只需检查位置即可完成工作。但是我想您希望对此进行更多的自定义,因此您必须使用@Override getItemViewtype
适配器的方法,并在此基础上在`Recyclerview中显示不同的视图。 Sample
现在,关于您要从每个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) {
}
});