2

我有這Activity裏面有兩個片段在TabLayout。在活動中使用ArrayList作爲內容的RecyclerView適配器在分區

在我的Activity有一個靜態的ArrayList。 我是我的拳頭Fragment,我們稱之爲FragmentOne我有一個RecyclerView和第二個Fragment,FragmentTwo我在哪裏我需要魔法發生。

FragmentTwo,我打電話給我Activity同樣的ArrayList,並添加一個或多個項目。在FragmentOne我也打電話給ArrayList,並將其值傳遞給我的RecyclerView的適配器中使用的非靜態ArrayList

我怎麼能在我的第二個Fragment調用這個方法我FragmentOneRecyclerViewnotifyDataSetChanged(),所以RecyclerView將更新它的內容?

或者有一個更有效的方式發送項目到我的拳FragmentArrayList,我用我的RecyclerView Adapter

我的活動:

public class MainActivity { 

    TabLayout tabLayout; 
    ViewPager viewPager; 
    ViewPagerAdapter viewPagerAdapter; 
    FragmentOne fragmentone; 

    // The ArrayList used as FragmentOne RecyclerView's Adapter 
    public static ArrayList<Contacts> contactsArrayList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     fragmentOne = new FragmentOne(); 

     contactsArrayList = new ArrayList<>(); 

    } 

} 

FragmentOne RecyclerView:

public class FragmentOne extends Fragment implements View.OnClickListener { 

    // RecyclerView's adapter 
    ContactsAdapter ctcAdapter; 

    // RecyclerView 
    RecyclerView rvContacts; 

    public FragmentOne() { 
     // Required empty public constructor 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_one, container, false); 

     // RecyclerView 
     rvContacts = (RecyclerView) view.findViewById(R.id.rvContacts); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); 
     linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     rvContacts.setLayoutManager(linearLayoutManager); 

     // Here I'm adding the static list from the Main Activity in the adapter 
     ctcAdapter = new ContactsAdapter(getContext(), MainActivity.contactsArrayList); 

     rvContacts.setAdapter(ctcAdapter); 

     return view; 
    } 
} 

我唯一需要的是如何調用ctcAdapter.notifyDataSetChanged()在我的第二個片段後,我添加了一個新的項目到contactsArrayList到使第一個片段中的列表顯示添加的項目。

+1

如果您發佈感興趣的代碼片段會更好。這會比用散文解釋更好解釋。 –

回答

2

有很多方法可以做到這一點。一種方法是使FragmentOne實現一個監聽器。喜歡的東西:

public interface ContactsChangedListener { 
    void onContactsChanged(); 
} 

public class FragmentOne implements ContactsChangedListener ... { 
    ... 
    @Override 
    void onContactsChanged() { 
    ctcAdapter.NotifyDataSetChanged(); 
    } 
} 

FragmentTwo,提供了一種通過監聽器:

public class FragmentTwo ... { 
    ... 
    private ContactsChangedListener mContactsChangedListener; 
    ... 
    public void setContactsChangedListener(
    ContactsChangedListener listener) { 
    mContactsChangedListener = listener; 
    } 
} 

,然後在MainActivityonCreate,你可以通過一個其他的接口:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    fragmentOne = new FragmentOne(); 
    ... 
    fragmentTwo = new FragmentTwo(); 
    fragmentTwo.setContactsChangedListener(fragmentOne); 
    contactsArrayList = new ArrayList<>(); 
    ... 
} 

這沒什麼奇特的。但它有訣竅,它保持封裝。

+1

非常感謝Michael,它完美的工作! – Rafael

相關問題