我正在使用主/細節模式來管理2窗格視圖和選擇器列表以及管理細節片段的其他活動。我正在使用一個接口來處理活動的分段回調。如何避免代碼重複與片段回調的細節活動?
雖然詳細信息活動複製了2窗格活動中的許多回調方法,但好像有很多代碼複製。在適當的情況下,我使用了不需要上下文的靜態方法,但需要上下文的地方我不確定如何整潔地刪除代碼重複。
繼承與抽象父活動是一個選項,但似乎有很多開銷。
有沒有更好的方法來做到這一點?
我正在使用主/細節模式來管理2窗格視圖和選擇器列表以及管理細節片段的其他活動。我正在使用一個接口來處理活動的分段回調。如何避免代碼重複與片段回調的細節活動?
雖然詳細信息活動複製了2窗格活動中的許多回調方法,但好像有很多代碼複製。在適當的情況下,我使用了不需要上下文的靜態方法,但需要上下文的地方我不確定如何整潔地刪除代碼重複。
繼承與抽象父活動是一個選項,但似乎有很多開銷。
有沒有更好的方法來做到這一點?
我在這裏問類似的問題:How many Activities vs Fragments?
我也很擔心邏輯的重複,答案我被引起了健康的辯論。
最後我選擇跟隨Stephen's answer,把儘可能多的邏輯進入Fragments
自己。
然而,其他貢獻者似乎非常熱衷於按照示例複製邏輯。
因此,可以說u有活動AB控制破片A和片段B
我的回答:
如果變量使用的大亂A和破片B,把它放在活動AB。然後將它傳遞給Frag A或Frag B他們需要的一切。或者讓Frag A或Frag B從Activity AB中檢索它。 如果該變量僅由Frag A或Frag B使用,則分別將其置於Frag A或Frag B中。
對於Frag A和Frag B都使用的方法,將這些方法放在另一個類中,併爲要使用的2個片段中的每個片段在Frag A和Frag B中創建該類的實例。
以下是我給另一個人的答案。但是,它似乎與你的問題有關,所以我在這裏重新發布它。
內部片段您需要一個活動AB可以實現的接口。 在示例機器人碼,它們有:
private Callbacks mCallbacks = sDummyCallbacks;
/*的回調,含有該片段的所有活動必須實現接口。這種機制允許活動被通知項目選擇。 */
public interface Callbacks {
/*Callback for when an item has been selected. */
public void onItemSelected(String id);
}
/*A dummy implementation of the {@link Callbacks} interface that does nothing. Used only when this fragment is not attached to an activity. */
private static Callbacks sDummyCallbacks = new Callbacks() {
@Override
public void onItemSelected(String id) {
}
};
回調接口能夠把裏面的一個片段(假設片段A)。我認爲這個Callbacks接口的目的就像任何Activity可以實現的Frag A中的嵌套類。所以如果Fragment A是一臺電視機,CallBacks就是電視遙控器(接口),允許Activity AB使用Fragment A.我可能錯誤的細節,因爲我是一個noob,但我確實讓我的程序在所有屏幕尺寸上完美地工作,這就是我使用的。因此片段A內
,我們有: (我把這個從Android的樣本程序)
@Override
public void onListItemClick(ListView listView, View view, int position, long id) {
super.onListItemClick(listView, view, position, id);
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
mCallbacks.onItemSelected(DummyContent.ITEMS.get(position).id);
//mCallbacks.onItemSelected(PUT YOUR SHIT HERE. int, String, etc.);
//mCallbacks.onItemSelected (Object);
}
而且裏面活動AB我們覆蓋了onItemSelected方法:
public class AB extends FragmentActivity implements ItemListFragment.Callbacks {
//...
@Override
//public void onItemSelected (CATCH YOUR SHIT HERE) {
//public void onItemSelected (Object obj) {
public void onItemSelected(String id) {
//Pass Data to Fragment B. For example:
Bundle arguments = new Bundle();
arguments.putString(「FragmentB_package」, id);
FragmentB fragment = new FragmentB();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction().replace(R.id.item_detail_container, fragment).commit();
}
所以內部活動AB ,你基本上把所有東西都扔到一個Bundle中,然後傳遞給B.如果你不確定如何使用Bundle,那麼看看這個類。
我基本上是由Android提供的示例代碼。與DummyContent的東西。當你製作一個新的Android應用程序包時,它是一個名爲MasterDetailFlow的標題。