2016-11-07 14 views
0

(EDIT)まで何recyclerViewリストをクリアするにはどうすればよいですか?

。私は、recyclerViewをクリアする方法をたくさん探しましたが、私は解決策の束を見つけました。しかし、彼らの誰も私の問題を解決しません。

フラグメントクラス:

public class Fase2Fragment extends Fragment{ 

    private List<mAuxModel> mAuxModel= new mAuxModel<>(); 
    private RecyclerView mRecyclerView; 
    public static boolean isOpenFase2 = true; 

    public void onCreate(Bundle savedInstanceState){...} 

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

     mRecyclerView = (RecyclerView) fase2frag.findViewById(R.id.recyclerView); 

     fab_open = AnimationUtils.loadAnimation(getActivity(), R.anim.fab_open); 
     fab_close = AnimationUtils.loadAnimation(getActivity(), R.anim.fab_close); 
     rotate_forward = AnimationUtils.loadAnimation(getActivity(), R.anim.rotate_forward); 
     rotate_backward = AnimationUtils.loadAnimation(getActivity(), R.anim.rotate_backward); 

     mRecyclerView.setHasFixedSize(true); 

     final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
     linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     mRecyclerView.setLayoutManager(linearLayoutManager); 

     mRecyclerView.addOnItemTouchListener(...); 

     fab.setOnClickListener(...); 

     return fase2frag; 
    } 
    public void removeItems() { 
     mAuxModel.clear(); 
     mRecyclerView.getAdapter().notifyDataSetChanged(); 
    } 
} 

アダプタクラス:

パブリッククラスAdpRecyclerViewはRecyclerView.Adapterを拡張{

private dataBase DB; 
private LayoutInflater mLayoutInflater; 
private List<mAuxModel> mAuxModel; 
private static final int ARRAY_A1 = 0; 
private static final int ARRAY_A2 = 1; 

public AdpRecyclerView(){} 

public AdpRecyclerView (Context context, List<mAuxModel> mAuxModel) { 
    DB = new dataBase(context); 

    this.mAuxModel= mAuxModel; 
    mLayoutInflater = (LayoutInflater) context.getSystemService(Context. 
             LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getItemViewType(int position) { 
    if (mAuxModel.get(position).getModel_tipoFase(). 
              equals("Att")) { 
     return ARRAY_A1; 
    } else { 
     return ARRAY_A2; 
    } 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 

    MyViewHolderA2 mvhA2; 
    MyViewHolderA1 mvhA1; 

    switch (viewType) { 
     case ARRAY_A1: 
      View viewA1 = inflater.inflate(R.layout. 
              item_a1, parent, false); 
      mvhAt = new MyViewHolderA1(viewA1); 
      return mvhA1; 

     case ARRAY_A2: 
      View viewA2 = inflater.inflate(R.layout. 
              item_a2, parent, false); 
      mvhAg = new MyViewHolderA2(viewA2); 
      return mvhA2; 
    } 

    return null; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

    switch (holder.getItemViewType()) { 
     case ARRAY_A1: 
      MyViewHolderA1 myViewHolderA1 = (MyViewHolderA1) holder; 
      myViewHolderA1.bindA1(position); 
      break; 

     case ARRAY_A2: 
      MyViewHolderA2 myViewHolderA2 = (MyViewHolderA2) holder; 
      myViewHolderA2.bindA2(position); 
      break; 
    } 

} 

@Override 
public int getItemCount() { 
    return mAuxModel.size(); 
} 

public class MyViewHolder() {...} 

ログエラー:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.victorvicari.actionbarteste, PID: 2355 
       java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v7.widget.RecyclerView$Adapter android.support.v7.widget.RecyclerView.getAdapter()' on a null object reference 
+1

あなたはadp.notifyDataSetChanged()を記述する必要があります。 – Aenadon

+0

arraylistオブジェクトをクリアしてアダプターに通知する... – sushildlh

+0

ここにあなたの 'RecyclerView'コードを投稿してください –

答えて

1
List<Object> list = new ArrayList<>(); 

RecyclerViewAdapter adapter = new RecyclerViewAdapter(); 

recyclerView.setAdapter(adapter); 

Now use the same list(same reference) & adapter. 

list.clear(); 
adapter.notifyDataSetChanged(); 
2
public void removeItems() { 
    mAuxModel.clear(); 
    recyclerView.getAdapter().notifyDatasetChanged(); 
} 

既に存在しているアダプタを使用して、アダプタの新しいインスタンスを更新しないでください。

+0

は、あなたの提案を試したときにnullpointer例外を呼び出す: '仮想メソッドを呼び出そうとしました 'android.support.v7.widget.RecyclerView $アダプタandroid.support.v7.widget.RecyclerView.getAdapter()'をヌルオブジェクト参照で実行しました。 –

+0

これは私の解決策に問題がないことを意味します。 'RecyclerView'のヌルポインタです。どこでRecyclerView変数を初期化しましたか?問題のコードをアップロードしてください。あなたのアダプタクラスコードは必要ありません。アクティビティ/フラグメントコード –

+0

をアップロードしてください。私はコード –

-1
public void clearData() { 
     int size = this.filterList.size(); // filterlist(arraylist) 
     if (size > 0) { 
      for (int i = 0; i < size; i++) { 
       this.filterList.remove(0); // filterlist(arraylist) 
      } 
      this.notifyItemRangeRemoved(0, size); 
     } 
} 

Call method : recyclerViewadapter.clearData(); 
+0

これは、リストからすべてのアイテムをクリアする非常に高価な方法です。 –

+0

私はあなたのソリューションを試しました。ただし、アイテムはリストに残ります –

関連する問題