0

조각 두 조각 FragmentA 및 FragmentB 있습니다. FragmentB에서 항목을 클릭하면 fragmentTransaction이 일부 데이터를 전달합니다.조각 변경 후 목록보기 어댑터를 업데이트하는 방법

FragmentA에는 FragmentB의 일부 데이터가있을 때 변경해야하는 사용자 지정 목록보기 어댑터가 있습니다.

문제는 변경되지 않았습니다. 여기

이 프래그먼트

public class CardsFragment extends ListFragment { 
 

 
    
 
    protected List<CardModel> list = new ArrayList<CardModel>(); 
 
    protected ArrayAdapter<CardModel> adapter; 
 

 

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

 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
 
          Bundle savedInstanceState) { 
 
     View rootView = inflater.inflate(R.layout.fragment_cards, container, 
 
       false); 
 
     return rootView; 
 
    } 
 

 

 

 
    @Override 
 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
 
     super.onViewCreated(view, savedInstanceState); 
 

 
     
 
     adapter = new CardAdapter(getListView().getContext(), 
 
       list); 
 

 

 
     
 

 
     Bundle args = getArguments(); 
 
     if (args != null) { 
 
      
 
      LoadCards(args.getString("key"), args.getString("keyId")); 
 

 
     } 
 
     else{ 
 

 
      LoadAllCards(); 
 
     } 
 

 
    } 
 

 
    private void LoadAllCards() { 
 
     
 
         /** 
 
         
 
         query the database code 
 
         
 
         **/ 
 

 
        list.add(...); 
 

 
        if (getListView().getAdapter() == null) { 
 

 
         setListAdapter(adapter); 
 

 
        } else { 
 
         adapter.refill(list); 
 

 
        } 
 
    } 
 

 

 
    private void LoadCards(String key, String keyId) { 
 
     
 
         /** 
 
         
 
         query the database code 
 
         
 
         **/ 
 

 
        list.add(...); 
 

 
        if (getListView().getAdapter() != null) { 
 

 
         
 
         adapter.refill(list); 
 

 
        } 
 
    } 
 

 

 
/** 
 

 
Refill function from adapter class 
 

 
public void refill(List<CardModel> cards){ 
 

 
     list.clear(); 
 
     list.addAll(cards); 
 
     notifyDataSetChanged(); 
 

 
    } 
 

 

 

 
**/ 
 

 

 
}

+0

당신은 refill()을 주석 처리했습니다. 그러나 이것이 내가 추천 한 코드입니다. – wwfloyd

+0

다른 클래스 CardAdapter.java에 리필 코드가 있습니다! 시위를 목적으로 해설했습니다! –

답변

0

음의 코드이며, 이것은 내가 직면 한 매우 어려운 문제이다. 같은 문제에 대한 stackoverflow 꽤 게시물이 있습니다. 이 문제의 실제 예제를 찾았습니다 here.

해시 맵을 추가하여 인스턴스화 된 모든 Fragment의 태그를 유지합니다. 이렇게하면 FragmentActivity에서 Fragment가 현재 조각인지 확인할 수 있습니다.이 경우 Fragment 내의 onResume() 메서드를 호출하여 새로 고칠 내용을 새로 고칩니다.

내부 FragmentPagerAdapter는

나는

mFragmentTags = new HashMap<Integer,String>(); 

가 그럼 난 위치와 함께 해시 맵의 조각의 태그를 저장하는 instantiateItem 메소드를 오버라이드 조각의 태그를 저장하는 해시 맵을 정의합니다.

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
Object obj = super.instantiateItem(container, position); 
if (obj instanceof Fragment) { 
    // record the fragment tag here. 
    Fragment f = (Fragment) obj; 
    String tag = f.getTag(); 
    mFragmentTags.put(position, tag); 
} 
return obj; 
} 

또한, I는 onPageSelected의 위치에 기초하여 이전에 생성 된 단편의

Fragment fragment = ((FragmentPageAdapter)viewpager.getAdapter()).getFragment(arg0); 

if (arg0 ==1 && fragment != null) 
{ 
    fragment.onResume(); 
} 

내부 onResume

public Fragment getFragment(int position) { 
    String tag = mFragmentTags.get(position); 
    if (tag == null) 
     return null; 
    return mFragmentManager.findFragmentByTag(tag); 
} 

내부 FragmentActivity 내부 방법 태그를 반환하는 방법을 만들어 귀하의 조각, listView 새로 고침. 이것은 트릭을해야합니다.

관련 문제