Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何更改回收物品的颜色?_Android_Android Recyclerview - Fatal编程技术网

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