包含线性布局的动态对话框

时间:2016-07-26 20:46:46

标签: android android-layout android-alertdialog

我正在尝试创建一个包含LinearLayout的对话框,该对话框包含许多其他LinearLayout个有效Button的内容,每个LinearLayout会将您带到一个网站。我没有静态地在布局xml文件中创建每个Button LinearLayouts,而是有一个JSON提要,可以在对话框中显示可能更改的按钮数。我找到了一个类似的question ......

...但我不确定如何将Dialog动态添加到LinearLayout。每个Button按钮的数据都会被解析为一个项目的ArrayList,每个项目代表Dialog中的<?php // Retrieves the stored value from the database $current_meta_value = get_post_meta( get_the_ID(), 'Current', true ); //Will either be empty or contain the inline CSS to hide the content. $hideOrShow = ""; // Checks and displays the retrieved value if( !empty( $current_meta_value ) ) { $hideOrShow = "display: none;"; } ?> <div id="content_to_hide_or_show" style="<?php echo $hideOrShow; ?>"> <!--Content that will be hidden or shown --> </div>

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

使用ListViewRecyclerView并使用适配器控制它。 对于对话框,您可以使用DialogFragment。覆盖onCreateDialog方法并在其中返回AlertDialogAlertDialog.Builder具有setView方法,您可以使用该方法来扩充您的列表或回收站。然后在对话框片段中保留对适配器的引用,并使用它来动态加载布局按钮。

例如:

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();
    }
}

如果您不想滚动行为,您仍然可以将此模式用于任何适配器视图,例如使用LinearLayout的{​​{3}}库,如ListView