Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.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
Java 适配器赢得';t更新_Java_Android_Android Fragments_Android Recyclerview - Fatal编程技术网

Java 适配器赢得';t更新

Java 适配器赢得';t更新,java,android,android-fragments,android-recyclerview,Java,Android,Android Fragments,Android Recyclerview,我试图在一个片段内的recycleView上显示一些项目。这些物品来自另一个碎片。我首先用一个空的arrayList创建recycleView,但当按下按钮时,数据通过接口发送,一个方法填充arrayList。我已经调试了一整天,并且工作得很好,当我按下按钮时,它记录了ArrayList的大小 我读到当列表更改时我必须通知我的适配器,所以我尝试使用notifyDataSetChange()、notifyItemInserted(dataReceived.size()-1),但两种方法都不起作用。

我试图在一个片段内的recycleView上显示一些项目。这些物品来自另一个碎片。我首先用一个空的arrayList创建recycleView,但当按下按钮时,数据通过接口发送,一个方法填充arrayList。我已经调试了一整天,并且工作得很好,当我按下按钮时,它记录了ArrayList的大小

我读到当列表更改时我必须通知我的适配器,所以我尝试使用notifyDataSetChange()、notifyItemInserted(dataReceived.size()-1),但两种方法都不起作用。每当我检查adapter.getItemCount()时,它抛出0,即使arraylist说抛出1

下面是我在接收数据的片段中的代码:

public class FavoriteFragment extends Fragment {
private OnFragmentInteractionListener mListener;

RecyclerView myRecyclerView;
public ArrayList<RecycleViewItem> dataReceived;


public MyFavoriteAdapter adapter;
public FavoriteFragment() {

}

public void setDataReceived(ArrayList<RecycleViewItem> dataReceived){
    this.dataReceived = dataReceived;
    Log.d("INTERFACE", "Data received by the FavoriteFragment!!!!" + " " + this.dataReceived.get(0).getCardName());
    for(int i = 0; i < dataReceived.size(); i++) {
        //THIS LINE RETURNS A 1
        Log.d("INTERFACE", "Items inside the dataReceived: " + dataReceived.size());
        //NEITHER WORKED
        //adapter.notifyItemInserted(dataReceived.size() -1);
        //adapter.notifyDataSetChanged();
        //THIS LINE WILL KEEP ON RETURNING 0
        Log.d("INTERFACE", "Items inside the list inside the adapter: " + adapter.getItemCount());
    }
}

public static FavoriteFragment newInstance() {
    FavoriteFragment fragment = new FavoriteFragment();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}



@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    dataReceived = new ArrayList<>();
    adapter = new MyFavoriteAdapter(dataReceived);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_favorite, container, false);

    myRecyclerView = (RecyclerView) view.findViewById(R.id.recycleView);
    myRecyclerView.setHasFixedSize(true);
    LinearLayoutManager myLayoutManager = new LinearLayoutManager(getActivity());
    myLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    if (myRecyclerView != null) {
        myRecyclerView.setAdapter(adapter);
    }
    myRecyclerView.setLayoutManager(myLayoutManager);
    return view;
}

public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

public interface OnFragmentInteractionListener {
    void onFragmentInteraction(Uri uri);
}
}
公共类FavoriteFragment扩展了片段{
私有OnFragmentInteractionListener mListener;
回收视图myRecyclerView;
已收到公共ArrayList数据;
公共MyFavorite适配器;
公共偏好片段(){
}
公共无效setDataReceived(ArrayList dataReceived){
this.dataReceived=dataReceived;
Log.d(“接口”,“FavoriteFragment接收到的数据!!!!”+“”+this.dataReceived.get(0.getCardName());
对于(int i=0;i
这是适配器:

public class MyFavoriteAdapter extends RecyclerView.Adapter<MyViewHolder>{
private ArrayList<RecycleViewItem> list = new ArrayList<RecycleViewItem>();

InterfaceListItemClickListener sender = null;


public MyFavoriteAdapter(ArrayList<RecycleViewItem> list) {
    this.list = list;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // create a new view
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_item_favorite, parent, false);
    MyViewHolder holder = new MyViewHolder(view, sender);
    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    if(list.size() >= 1) {
        holder.favoriteImageView.setImageResource(list.get(position).getImageResourceID());
        holder.favoriteTextView.setText(list.get(position).getCardName());
    }
}

@Override
public int getItemCount() {
    return list.size();
}
}
公共类MyFavoriteAdapter扩展了RecyclerView.Adapter{ private ArrayList list=new ArrayList(); InterfaceListItemClickListener发送方=null; 公共MyFavoriteAdapter(ArrayList列表){ this.list=列表; } @凌驾 公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){ //创建新视图 View View=LayoutInflater.from(parent.getContext()).flate(R.layout.recycle\u item\u favorite,parent,false); MyViewHolder=新的MyViewHolder(视图,发件人); 报税表持有人; } @凌驾 公共无效onBindViewHolder(MyViewHolder,int位置){ 如果(list.size()>=1){ holder.favoriteMageView.setImageResource(list.get(position.getImageResourceID()); holder.favoriteTextView.setText(list.get(position.getCardName()); } } @凌驾 public int getItemCount(){ 返回list.size(); } }
公共无效setDataReceived(ArrayList dataReceived){ this.dataReceived.addAll(dataReceived); .... }
不重新创建列表

公共无效setDataReceived(ArrayList dataReceived){ this.dataReceived.addAll(dataReceived); .... }
不要重新创建列表您的适配器有一个私有变量
list
,必须对其进行修改才能使
适配器生效。notifyDataSetChanged()

以下是您的方法:

public void setDataReceived(ArrayList<RecycleViewItem> dataReceived){
    this.dataReceived = dataReceived;
    ...
}
您可能需要将适配器的
列表
变量公开,或通过getter公开它:

public ArrayList<RecycleViewItem> getList() {
    return list
}
public ArrayList getList(){
返回列表
}
或者甚至添加一个可以向其中添加项目的方法:

public void addAll(ArrayList<RecycleViewItem> items) {
    list.addAll(items);
}
public void addAll(数组列表项){
列表。添加所有(项目);
}

您的适配器有一个私有变量
列表
,必须对其进行修改才能使
适配器生效。notifyDataSetChanged()

以下是您的方法:

public void setDataReceived(ArrayList<RecycleViewItem> dataReceived){
    this.dataReceived = dataReceived;
    ...
}
您可能需要将适配器的
列表
变量公开,或通过getter公开它:

public ArrayList<RecycleViewItem> getList() {
    return list
}
public ArrayList getList(){
返回列表
}
或者甚至添加一个可以向其中添加项目的方法:

public void addAll(ArrayList<RecycleViewItem> items) {
    list.addAll(items);
}
public void addAll(数组列表项){
列表。添加所有(项目);
}

这很有效,谢谢!我真的不知道那些add方法。该应用程序仍然没有做我想要的,但至少这是固定的!我会接受你的答案,当它让我工作谢谢!我真的不知道那些add方法。该应用程序仍然没有做我想要的,但至少这是固定的!当你的回答让我满意时,我会接受的