【问题标题】:How do i get this android custom dialog to appear(inflate)?我如何让这个 android 自定义对话框出现(膨胀)?
【发布时间】:2013-07-30 22:53:01
【问题描述】:

非常感谢您的明确指导。这是来自 google android dev 教程,但是我找不到显示(膨胀)它的方法。 alertDialog.show() 导致程序在模拟器上崩溃。

public class HelloAndroidActivity extends Activity {
   /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    AlertDialog.Builder builder;
    AlertDialog alertDialog;

    Context mContext = getApplicationContext();
    LayoutInflater inflater = (LayoutInflater)
    mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.custom_dialog,
                                   (ViewGroup) findViewById(R.id.layout_root));

    TextView text = (TextView) layout.findViewById(R.id.text);
    text.setText("Hello, this is a custom dialog!");
    ImageView image = (ImageView) layout.findViewById(R.id.image);
    image.setImageResource(R.drawable.android);

    builder = new AlertDialog.Builder(mContext);
    builder.setView(layout);
    alertDialog = builder.create();
}

}

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    最终用途:

    alertDialog.show();
    

    【讨论】:

    • 我试过了,然后又做了一次。模拟器说程序意外退出。 Logcat 目前正在失败
    • 您从 logcat 得到的响应是什么?
    • 我无法让文本适合此处。这里是要点链接:gist.github.com/1673471
    • 试试这个:View layout = inflater.inflate(R.layout.custom_dialog, null);
    • 那也没用。但是,我找到了一个解决方案,我将在稍后发布。
    【解决方案2】:

    我认为最简单和更可定制的方法是对 DialogFragment 进行膨胀。

    您将在活动中执行以下操作:

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    DialogFragment dfrag = new CustomDFrag();
    dfrag.show(ft,"dialog");
    

    然后创建扩展DialogFragment的类CustomDFrag。然后你覆盖 onCreateDialog 并使用你到目前为止所做的,但现在使用自定义布局:

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
    
        View view = inflater.inflate(R.layout.my_layout,null);
    
                //this is how you'd get a view from the inflated layout
        data = (TextView) view.findViewById(R.id.evo_addhist_data); 
        data.setText("lol");
    
    
                //tell the builder that you wan't that inflated layout to show
                // and then set the button (negative/positive in this case) if you want
        builder.setView(
                view)
                .setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface arg0, int arg1) {
                                // TODO Auto-generated method stub
                            }
                        })
                .setNegativeButton("CANCEL",
                        new DialogInterface.OnClickListener() {
    
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // TODO Auto-generated method stub
                            }
                        });
    
        return builder.create();
    }
    

    ps.:我推荐这个是因为我认为不只处理 textview 会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2012-10-28
      • 1970-01-01
      • 2013-04-29
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多