【问题标题】:Creating a dialog after onClick in listView [duplicate]在listView中的onClick之后创建一个对话框[重复]
【发布时间】:2013-10-18 18:29:40
【问题描述】:

我正在尝试从 listView 中获取一个对话框。我想让用户看到一个具有 3 种字体大小的对话框,以便他可以更改应用程序的字体大小。要进入此对话框,用户必须点击 listView 中的按钮。我是这样弄的:

package com.reekapps.simplenote;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.app.Dialog;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class Settings extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);
    getActionBar().setTitle("Settings");



    String[] listItems = {"Colour", "Font Size",};
    ListView lv = (ListView) findViewById(R.id.settings_list);

    lv.setAdapter(new ArrayAdapter<String>
    (this, android.R.layout.simple_list_item_1, listItems));

    lv.setOnItemClickListener(new OnItemClickListener()
    {
        public void onItemClick(AdapterView<?> parent, View
                view, int position, long id)
        {
            String[] listItems = {"Colour", "Font Size",};
            if(listItems[position].equals("Font Size"))
            {

                AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
                builder.setTitle("Choose Font Size");
                AlertDialog alertDialog = builder.create();
                alertDialog.show();
            }

        }
    });


    // TODO Auto-generated method stub
}

}

它没有显示任何错误,但是当我点击字体大小(进入对话框的按钮)时它崩溃了。

感谢您的宝贵时间!

【问题讨论】:

  • 我们不是读心术的人,我们需要知道崩溃是什么。 :)
  • 看起来一样 stackoverflow.com/questions/19455649/… 可能重复
  • 同一个问题你发了两次
  • 使用活动上下文AlertDialog.Builder builder = new AlertDialog.Builder(Settings.this)
  • @Vandana Srivastava 不,我没有这是相同的上下文,而是另一个问题。

标签: java android listview dialog onclick


【解决方案1】:

正如 Raghunandan 已经在上面评论的主要问题是上下文,像这样更新您的列表视图的点击侦听器

lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                String[] listItems = { "Colour", "Font Size", };
                if (listItems[position].equals("Font Size")) {


                    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                            Settings.this );

                        // set title
                        alertDialogBuilder.setTitle("Choose Font Size");

                        // set dialog message
                        alertDialogBuilder
                            .setMessage("Click yes to exit!")
                            .setCancelable(false)
                            .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,int id) {
                                    // if this button is clicked, close
                                    // current activity

                                }
                              })
                            .setNegativeButton("No",new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,int id) {
                                    // if this button is clicked, just close
                                    // the dialog box and do nothing
                                    dialog.cancel();
                                }
                            });

                            // create alert dialog
                            AlertDialog alertDialog = alertDialogBuilder.create();

                            // show it
                            alertDialog.show();


                }

            }
        });

【讨论】:

    【解决方案2】:

    使用活动上下文

    替换

      AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
    

      AlertDialog.Builder builder = new AlertDialog.Builder(Settings.this);
    

    onItemClick下面的不需要

       String[] listItems = {"Colour", "Font Size",};
    

    改用下面的

       String name = (String) parent.getItemAtPosition(position); //get clicked item
       if(name.equals("Font Size"))
       {
    

    【讨论】:

      【解决方案3】:

      您必须先创建构建器。请将您的 onItemClick 替换为:

                  public void onItemClick(AdapterView<?> parent, View view,
                      int position, long id) {
                  String[] listItems = { "Colour", "Font Size", };
                  if (listItems[position].equals("Font Size")) {
      
                      AlertDialog builder = new AlertDialog.Builder(
                              Settings.this).create();
                      builder.setTitle("Choose Font Size");
                      builder.show();
                  }
              }
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 2011-11-16
        • 1970-01-01
        • 2013-10-10
        • 1970-01-01
        相关资源
        最近更新 更多