2016-11-07 2 views
0

(편집)어떻게하면 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 $ Adapter android.support.v7.widget.RecyclerView.getAdapter()'null 객체 참조에'. –

+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

나는 당신의 해결책을 시도했다. 그러나 항목은 목록에 남아 있습니다. –

관련 문제