Android 如何更改回收物品的颜色?
我有Android 如何更改回收物品的颜色?,android,android-recyclerview,Android,Android Recyclerview,我有RecyclerView,我正在膨胀数据。我的要求是,我必须显示黑色的第一项文字,其余的项目应在灰色。当用户滚动时,那个灰色的项目应该是黑色的,它的跟随者将再次变成灰色。我一直在考虑这个使用位置,但我感到困惑 public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> implements RecyclerViewFastScroller
RecyclerView
,我正在膨胀数据。我的要求是,我必须显示黑色的第一项文字,其余的项目应在灰色。当用户滚动时,那个灰色的项目应该是黑色的,它的跟随者将再次变成灰色。我一直在考虑这个使用位置,但我感到困惑
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>
implements RecyclerViewFastScroller.BubbleTextGetter {
private List<String> mDataArray;
public RecyclerViewAdapter(List<String> dataset) {
mDataArray = dataset;
}
@Override
public int getItemCount() {
if (mDataArray == null)
return 0;
return mDataArray.size();
}
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler_view_layout, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mDataArray.get(position));
}
@Override
public String getTextToShowInBubble(int pos) {
if (pos < 0 || pos >= mDataArray.size())
return null;
String name = mDataArray.get(pos);
if (name == null || name.length() < 1)
return null;
return mDataArray.get(pos).substring(0, 1);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
@Bind(R.id.tv_alphabet)
public TextView mTextView;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
我的活动,我在那里给回收商打电话
private ProgressDialog mProgressDialog = null;
private static final String API_MSG_CALL = "API_MSG_CALL";
private Map<String, String> mapobject;
private LinearLayoutManager linearLayoutManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_message, null);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_viewLaws);
mRecyclerView.setAdapter(msgAdapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
msgAdapter = new MessageAdapter(msgList, getActivity(), this);
linearLayoutManager = new LinearLayoutManager(getActivity());
//msgAdapter.notifyDataSetChanged();
mProgressDialog = new ProgressDialog(getActivity());
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int firstVisible = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
msgAdapter.changeItem(firstVisible);
}
});
private ProgressDialog mProgressDialog=null;
私有静态最终字符串API\u MSG\u CALL=“API\u MSG\u CALL”;
私有地图映射对象;
私人直线酒店经理直线酒店经理;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment_消息,空);
mRecyclerView=(RecyclerView)view.findviewbyd(R.id.recycler\u viewLaws);
mRecyclerView.setAdapter(msgAdapter);
setLayoutManager(新的LinearLayoutManager(getActivity());
msgAdapter=newmessageadapter(msgList,getActivity(),this);
linearLayoutManager=新的linearLayoutManager(getActivity());
//msgAdapter.notifyDataSetChanged();
mProgressDialog=newprogressdialog(getActivity());
mrecycleView.addOnScrollListener(新的RecycleView.OnScrollListener(){
@凌驾
已填空的公共空间(RecyclerView RecyclerView、int dx、int dy){
super.onScrolled(recyclerView、dx、dy);
int firstVisible=linearLayoutManager.findFirstCompletelyVisibleItemPosition();
msgAdapter.changeItem(第一个可见);
}
});
使用holder.itemView.setBackgroundColor(…);
范例
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.itemView.setBackgroundColor(yourcolor);
holder.mTextView.setText(mDataArray.get(position));
}
更新:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if(position==0){
holder.itemView.setBackgroundColor(Color.BLACK);
}else{
holder.itemView.setBackgroundColor(Color.GREY);
}
holder.mTextView.setText(mDataArray.get(position));
}
首先,在主要活动中,使用此代码查找第一个可见项:
recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int firstVisible = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
RecyclerViewAdapter.changeItem(firstVisible);
}
});
然后在适配器中添加以下方法:
private int firstVisible = 0;
public void changeItem(int position){
firstVisible = position;
notifyItemChanged(firstVisible);
notifyDataSetChanged();
}
在onBindViewHolder中添加以下代码:
if (position == firstVisible) {
holder.txtNumber.setBackgroundColor(mContext.getResources().getColor(R.color.black));
}
我只是用一段文字作为例子,但你也可以更改cardview的背景,以便回复,但我只需将第一项用黑色显示。其余内容将用灰色更新我的答案请检查谢谢,但我还需要一个帮助,先生..对于0位置,我的数据是更改的,而另一个是不同的颜色。现在我滚动页面,然后0位置开始ne不可见。让我看看第10位现在在顶部。那么我如何再次使第10位变黑,其余可见部分变灰?@Target,您可以使用可见项目计数获得每个滚动条件下的最顶部位置,然后设置类似上述代码的颜色。Thnxx先生,但在1毫秒内,其颜色会发生变化,然后整个RecyclerView数据为黑色..:(是在分钟Sir是的先生,请在我的代码中找到标记我更新的代码标题。我将MainActivity和Adapter值放在一起。请给出您有价值的建议。我想让第一个回收项目来自0索引或滚动后进入9位。第一个顶部项目应为黑色,其余项目应为红色。请帮助我我坚信你一定能帮助我。我在这两天里一直坚持着这一点。不客气。所以请把这个作为正确的答案告诉其他人
if (position == firstVisible) {
holder.txtNumber.setBackgroundColor(mContext.getResources().getColor(R.color.black));
}