2014-01-28 46 views
1

我的應用程序正在從服務器接收json,並基於該模型使用google的gson庫(json字符串直接映射到java對象表示形式)創建模型。然後,我需要將幾個相同的模型傳遞給Fragment以創建視圖。我怎麼能實現它,因爲片段有靜態構造函數和參數可以通過Bundle對象傳遞。 這是非常簡單的模型,該模型將在陣列與另一個進行傳遞:將模型對象的數組傳遞給片段

public class SingleHomeCardItem { 
    private String title; 
    private String subtitle; 
    private String badgeNumber; 
    private String backgroundUrl; 
    private String backgroundGradient; 
    private String targetUrl; 
    private String target; 
    private String row; 

    public String getTitle() { 
     return title; 
    } 

    public String getSubtitle() { 
     return subtitle; 
    } 

    public String getBadgeNumber() { 
     return badgeNumber; 
    } 

    public String getBackgroundUrl() { 
     return backgroundUrl; 
    } 

    public String getBackgroundGradient() { 
     return backgroundGradient; 
    } 

    public String getTargetUrl() { 
     return targetUrl; 
    } 

    public String getTarget() { 
     return target; 
    } 

    public String getRow() { 
     return row; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public void setSubtitle(String subtitle) { 
     this.subtitle = subtitle; 
    } 

    public void setBadgeNumber(String badgeNumber) { 
     this.badgeNumber = badgeNumber; 
    } 

    public void setBackgroundUrl(String backgroundUrl) { 
     this.backgroundUrl = backgroundUrl; 
    } 

    public void setBackgroundGradient(String backgroundGradient) { 
     this.backgroundGradient = backgroundGradient; 
    } 

    public void setTargetUrl(String targetUrl) { 
     this.targetUrl = targetUrl; 
    } 

    public void setTarget(String target) { 
     this.target = target; 
    } 

    public void setRow(String row) { 
     this.row = row; 
    } 
} 

而這裏的,我想接收模式的陣列,並對其進行處理,以創建視圖的片段:

public class HomeshelfFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = createView(inflater, container, getArguments().????); 
     return v; 
    } 

    public static HomeshelfFragment newInstance(SingleHomeCardItem[] items) { 

     HomeshelfFragment f = new HomeshelfFragment(); 
     Bundle b = new Bundle(); 
     // ????? 
     f.setArguments(b); 

     return f; 
    } 

    private View createView(LayoutInflater inflater, ViewGroup container, SingleHomeCardItem[] items) { 
     View v = inflater.inflate(R.layout.home_card_3_items, container, false); 
     // add views to the inflated view based on models data 
     return v; 
    } 

} 

解決這個問題的最好方法是什麼? 在此先感謝!

回答

2

解決方案1 ​​

,而不是將JSON對象你可以創建能夠保存數據JSON對象的Java類。因此u能後傳給你的數據,如通過活動字符串和片段

public class SingleHomeCardItem extends JSONObject { 
private static final String TAG = SingleHomeCardItem.class.getSimpleName(); 

public static final String subtitle = "subtitle"; 
public static final String badgeNumber = "badgeNumber"; 
public static final String backgroundUrl = "backgroundUrl"; 
public static final String backgroundGradient = "backgroundGradient"; 
public static final String targetUrl = "targetUrl"; 
public static final String target = "target"; 
public static final String row = "row"; 

public SingleHomeCardItem(String json) throws JSONException { 
    super(json); 
} 

public SingleHomeCardItem(JSONObject json) throws JSONException { 
    super(json.toString()); 
} 

public String getSubtitle() { 
    return optString(subtitle, ""); 
} 

public String getBadgeNumber() { 
    return optString(badgeNumber, ""); 
} 

public String getBackgroundUrl() { 
    return optString(backgroundUrl, ""); 
} 

public String getBackgroundGradient() { 
    return optString(backgroundGradient, ""); 
} 

public String getTargetUrl() { 
    return optString(targetUrl, ""); 
} 

public String getTarget() { 
    return optString(target, ""); 
} 
public String getRow() { 
    return optString(row, ""); 
} 
} 

您可以創建更復雜的類contatins SingleHomeCardItem實例

public class AccountData extends JSONObject { 

    private static final String TAG=AccountData.class.getSimpleName(); 

    private static final String ACOUNT_CARDS="SingleHomeCardItemList"; 

    public AccountData(String json) throws JSONException { 
     super(json); 
     } 

     public AccountData(JSONObject json) throws JSONException { 
      super(json.toString()); 
     } 

     public ArrayList<SingleHomeCardItem> getAcountCards() throws JSONException { 

      ArrayList<SingleHomeCardItem> cardsArray = new ArrayList<SingleHomeCardItem>(); 
      JSONArray cardsJSONArray = optJSONArray(ACOUNT_CARDS); 


      if(!optString(ACOUNT_CARDS).equals("null")){ 
       for(int i=0; i<cardsJSONArray.length(); i++) { 
         cardsArray.add(new   SingleHomeCardItem(cardsJSONArray.getString(i))); 
         } 
      } 

      return cardsArray; 
      } 

的列表,你可以通過像絃樂

數據
public class HomeshelfFragment extends Fragment { 

public static final String KEY_DATA = "KEY_DATA"; 
private ArrayList<SingleHomeCardItem> myCards; 



public static HomeshelfFragment newInstance(String data) { 

    HomeshelfFragment f = new HomeshelfFragment(); 
    Bundle b = new Bundle(); 
    b.putString(KEY_DATA, data); 
    f.setArguments(b); 

    return f; 
} 

private View createView(LayoutInflater inflater, ViewGroup container, SingleHomeCardItem[] items) { 
     View v = inflater.inflate(<your layout>, container, false); 

     String dataString = this.getArguments().getString(KEY_DATA, ""); 

    AccountData data = null; 

     myCards = new ArrayList<SingleHomeCardItem>(); 
    try { 
     data = new AccountData(datastring); 
    } catch (JSONException e) { 

     e.printStackTrace(); 
    } 


    try { 
        // a list with your SingleHomeCardItem instances 
     myCards = data.getAcountCards(); 

    } catch (JSONException e) { 

     e.printStackTrace(); 
    } 
     // add views to the inflated view based on models data 
    return v; 
} 

}

溶液2

創建AcountCards類,但不延長的JSONObject但實現Parcable界面,並使用getParcelableExtra()之類this

溶液3

創建AcountCards類,但不延長的JSONObject但實現Serialiazible接口和使用getSerializableExtra(),如this