2017-11-12 1 views
0

프래그먼트보기를 업데이트하여 데이터베이스에서 실시간으로 값이 들어 오면 내 재활용보기를 업데이트 할 수 있어야합니다. 현재 OnCreateView 메서드에서이 작업을 수행하지만 탭 전환시이 작업을 업데이트 할 수 없습니다.조각보기 업데이트

public class UserFragment extends Fragment { 

public UserFragment() { 
} 

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

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.fragment_blank, container, false); 

    RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view); 
    rv.setHasFixedSize(false); 
    final ArrayList<widgetData> dummie_list = new ArrayList<>(); 
    FirebaseAuth mAuth = FirebaseAuth.getInstance(); 
    final MyAdapter adapter = new MyAdapter(dummie_list); 
    rv.setAdapter(adapter); 

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("contacts").child(mAuth.getUid()); 
    ref.addListenerForSingleValueEvent(
      new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        for(DataSnapshot ds: dataSnapshot.getChildren()) 
        { 
         if(!dummie_list.contains(new widgetData(ds.getValue(String.class), "FUCK FIREBASE", 0))) 
         { 
          dummie_list.add(new widgetData(ds.getValue(String.class), "FUCK FIREBASE", 0)); 
          adapter.notifyDataSetChanged(); 

         } 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 
        //handle databaseError 
       } 
      }); 

    LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
    rv.setLayoutManager(llm); 

    return rootView; 
} 

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     //Update view here 
    } 
} 

} 

setUserVisibleHint은 내가 OnCreateView 가져 매개 변수에 액세스 할 수 없기 때문에보기를 업데이트 할 수있는 방법이없는 것 등의 문제를 일으키는 것입니다.

답변

0

ViewPager를 사용하고 있습니다 .Pager에 PageChange Listener를 추가하고 업데이트 할 각 프래그먼트에 콜백을 제공하십시오.

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

// optional 
@Override 
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } 

// optional 
@Override 
public void onPageSelected(int position) { 
// Call a callback here to fragment to initialize update 
     } 

// optional 
@Override 
public void onPageScrollStateChanged(int state) { } 

});

EventBus을 사용하면 다른 이벤트에서 업데이트를 실행할 수 있습니다.

관련 문제