2016-07-26 55 views
1

我正在嘗試製作一個對話框,該對話框由一個LinearLayout組成,其中包含多個其他LinearLayout,這些對象實際上都會將您帶入網站。我沒有在佈局xml文件中靜態製作每個LinearLayoutButton,而是使用了一個JSON提要,該提要的對話框中顯示的按鈕數量可能會變化。我發現question,看起來類似...包含線性佈局的動態對話框

...但我不知道如何動態地添加LinearLayoutsDialog。每個LinearLayout按鈕的數據被解析爲項目的ArrayList,每個表示Dialog中的Button

+0

爲什麼你試圖使用LinearLayouts而不是使用relativeLayout? – user3621165

+0

我認爲只要使用「addView()」將每個「按鈕」添加到包含的LinearLayout就不那麼麻煩,否則我將不得不使每個「按鈕」相對於之前創建的那個「按鈕」。 – Ben

回答

0

通常你應該使用這個的RelativeLayout:

注意到,在您最後一次創建按鈕並設置下一個到下一個位置的成本沒有那麼多的性能,創造新的佈局。你應該嘗試調用addView();儘可能少,因爲每次必須再次渲染視圖。

但是,如果有必要添加LinearLayouts,這裏是一個示例代碼:

LinearLayout linearLayout = new LinearLayout(context); 
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
linearLayout.setOrientation(LinearLayout.VERTICAL); 
viewGroup.addView(linearLayout); 
+0

謝謝,但我對如何使用ViewGroup有點困惑。如何設置viewGroup以及爲什麼使用ViewGroup? – Ben

+0

所有佈局都從ViewGroup擴展而來。一個ViewGroup剛剛描述,該視圖可能有孩子。所以你可以將你的LinearLayout轉換爲ViewGroup。 - >使用一個DialogFragment並擴充一個XML,其中只包含一個LinearLayout。給LinearLayout一個id。膨脹後,通過「findViewById」從XML中獲取佈局。這將是您的「viewGroup」,您可以在其中添加所有其他LinearLayouts ...但請看下面的不變式答案。這是更好的,而不是使用addView :) – user3621165

0

使用ListViewRecyclerView,並用一個適配器來控制它。 對於該對話框,您可以使用DialogFragment。覆蓋onCreateDialog方法並返回一個AlertDialog裏面。 AlertDialog.BuildersetView方法,您可以使用它來充值列表或回收站。然後,只需在對話框片段中保留對適配器的引用,並使用它來動態加載佈局按鈕。

例如:

public class WebsitePickerDialogFragment extends DialogFragment { 

Adapter adapter = new YourRecyclerViewAdapter(); 

@NonNull 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final RecyclerView contentView = LayoutInflater.from(getContext()).inflate(... 
    contentView.setAdapter(adapter); 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setView(contentView); 
    return builder.create(); 
    } 
} 

如果你不想滾動行爲,您仍然可以使用這個模式與任何適配器觀點,就像使用LinearLayoutListViewhttps://github.com/frankiesardo/LinearListView庫。

+0

我會試一試,但有什麼洞察力,你可以給適配器發生了什麼? – Ben

+0

@Ben看看這個例子:http://stacktips.com/tutorials/android/android-recyclerview-example#25-creating-recyclerview-adapter 適配器應該保存數據(例如網站URI列表)它可以爲每個URI創建一個視圖並將其放入回收站視圖中。這是一個非常常見的模式,你可以找到大量的例子。採用這種方法,適配器將負責管理您的動態視圖,您只需要注意將正確的數據放入適配器。 – maciekjanusz

+0

您鏈接的示例非常有幫助,但是我遇到的最後一個問題實際上是讓我的自定義DialogFragment出現。我的意思是,在使我的自定義DialogFragment出現的按鈕的onClick中需要什麼?截至目前我所有的是FragmentManager fm = getSupportFragmentManager(); DynamicDialogFrag alertDialog =(DynamicDialogFrag)DynamicDialogFrag.instantiate(this,「」); alertDialog.show(fm,「tag」); 這並不完全正常。 – Ben