2014-01-27 80 views
2

我有從XML和一個JSON的佈局,從這個佈局被誇大。如何從JSON創建一個動態佈局

問題是我必須創建一個動態類擴展linearlayout並創建此佈局並將其充氣。

下面的圖像是相同的佈局充氣此JSON的基礎上兩次: -

{ 
"data": { 
    "layouts": [ 
     { 
      "text": "Loss Date", 
      "fromdate": "20-12-2013", 
      "todate": "22-12-2014" 
     }, 
     { 
      "text": "Loss Date", 
      "fromdate": "20-12-2013", 
      "todate": "22-12-2014" 
     } 
    ] 
} 

}

我已經使用列表視圖做到了。

我的問題是我可以通過擴展linearlayout來創建它並創建它並在listview/scrollview中使用它? 這裏是XML: -

<?xml version="1.0" encoding="utf-8"?> 

<View 
    android:layout_width="fill_parent" 
    android:layout_height="@dimen/five" 
    android:background="@drawable/nav_drawer_background" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <CheckBox 
     android:id="@+id/datefiltercheckbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@android:color/transparent" 
     android:button="@drawable/selector_checkbox_filter" 
     android:focusable="false" 
     android:layout_marginLeft="@dimen/five" 
     android:paddingLeft="@dimen/thirty" 
     android:text="Loss Date" 
     android:textSize="@dimen/rightDrawerTitleText" 
     android:textStyle="normal" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/fromdate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="50" 
      android:background="@android:color/transparent" 
      android:drawableRight="@drawable/ic_todo" 
      android:gravity="center" 
      android:text="From: 20-12-2014" 
      android:textColor="@android:color/white" /> 

     <TextView 
      android:id="@+id/todate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="50" 
      android:background="@android:color/transparent" 
      android:drawableRight="@drawable/ic_todo" 
      android:gravity="center" 
      android:text="To: 20-12-2014" 
      android:textColor="@android:color/white" /> 
    </LinearLayout> 
</LinearLayout> 

<View 
    android:layout_width="fill_parent" 
    android:layout_height="@dimen/five" 
    android:background="@drawable/nav_drawer_background" /> 

enter image description here

+1

你知道**定製適配器**爲listview? –

+0

是的,我知道。我需要將它創建爲一個獨立的組件類 –

回答

0

你應該做這樣的事情。並創建後調用解析JSON的setData方法

class MyLayout extends LinearLayout{ 
      public MyLayout(Context context) { 
       super(context); 
       setOrientation(VERTICAL); 
       setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
      } 

      private View createItem(JSONObject data) { 
       View v = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE).inflate(R.layout.mylayout, null); 
       try { 
        ((CheckBox)v.findViewById(R.id.datefiltercheckbox)).setText(data.getString("text")); 
        // Other views 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       // or you can create item's layout manually here without using inflater and xml 

       return v; 

      } 

      public void setData(JSONArray array){ 
       for(int i = 0 ; i < array.length() ; i++){ 
        try { 
         addView(createItem(array.getJSONObject(i))); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }