安卓对话框未显示

3
谁能想到弹出对话框如此困难。在C#中,这很容易。我在网上寻找帮助,但每个提示似乎都给我带来了麻烦。请问有人可以查看下面的代码并告诉我哪里可能出错了吗?
我的要求非常简单。用户单击按钮。然后列表出现。然后用户单击列表中的一个项目,对话框就会出现。列表视图事件中的onItemClick代码来自其他人。它显然对那个人有效。但我一直在点击却什么都没有看到。如果您有任何修复它的建议或者新代码,请告诉我。对不起,日志没有错误信息。
请具体说明我应该在哪里放置代码,因为我是一个Android新手。谢谢您提前的帮助!
public class SetPrediction extends Activity
{
    Button btnInsrt, btnFTeam, btnSTeam;
    ArrayList<NameValuePair> nameValuePairs;
    TextView txtGameTeams;
    Bundle recdData;
    String game;

    JSONArray jArray;
    String result;
    InputStream is;
    StringBuilder sb;

    ArrayList<String> fNames;
    ListView listView;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.set_prediction);

        nameValuePairs = new ArrayList<NameValuePair>();
        txtGameTeams = (TextView) findViewById(R.id.txtGameTeams);

        recdData = getIntent().getExtras(); 
        game = recdData.getString("xxxx.xxxx.xxx");
        txtGameTeams.setText("xxxxxxx: " + game + " game.");

        btnInsrt = (Button) findViewById(R.id.btnInsert);
        btnFTeam = (Button) findViewById(R.id.btnFirstTeam);
        btnSTeam = (Button) findViewById(R.id.btnSecondTeam);

        btnFTeam.setText(removeSpaces(game.split("vs")[0]));
        btnSTeam.setText(removeSpaces(game.split("vs")[1]));

        btnSTeam.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View v) 
            {
                String result = "";
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("players", removeSpaces(game.split("vs")[1])));

                fNames = new ArrayList<String>();
                listView = (ListView) findViewById(R.id.lstPlayerForPrediction);

                //http post
                try
                {
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://xxxxx/getTeamPlayers.php");
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpclient.execute(httppost); 
                    HttpEntity entity = response.getEntity();
                    InputStream is = entity.getContent();

                    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                    StringBuilder sb = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null) 
                    {
                        sb.append(line + "\n");
                    }
                    is.close();

                    result=sb.toString();
                }
                catch(Exception e)
                {
                    Log.e("log_tag", "Error in http connection " + e.toString());
                }

                //parse json data
                try
                {
                    JSONArray jArray = new JSONArray(result);
                    for(int i=0;i<jArray.length();i++)
                        fNames.add(jArray.getJSONObject(i).getString("First_Name"));  

                }
                catch(JSONException e)
                {
                    Log.e("log_tag", "Error parsing data " + e.toString());
                }

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(SetPrediction.this, android.R.layout.simple_list_item_1, fNames);
                listView.setAdapter(adapter);

                listView.setOnItemClickListener(new OnItemClickListener()
                {
                    public void onItemClick(AdapterView<?> arg0, View predictView, int item, long arg3) 
                    {
                        final CharSequence[] items = {"Online", "Away", "Do not distrub","Invisible","Offline"}; 
                        AlertDialog.Builder builder = new AlertDialog.Builder(SetPrediction.this); 


                        builder.setTitle("Change Status"); 
                        builder.setItems(items, new DialogInterface.OnClickListener() 
                        { 
                            public void onClick(DialogInterface dialog, int item) 
                            { 
                                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); 
                            } 
                        });

                        AlertDialog alert = builder.create(); 
                        alert.show();
                    } 
                });
            }
        });
    }


    public String removeSpaces(String s) 
    {  
        StringTokenizer st = new StringTokenizer(s," ",false);
        String t="";
        while (st.hasMoreElements()) t += st.nextElement();
        return t;
    }

问题出在listView.setOnItemClickListener(new OnItemClickListener()事件上,这部分无法正常工作。
2个回答

1

看看这个:

public void showAlertDialog(String title, String message, Context context)
{
    final AlertDialog alertDialog = new AlertDialog.Builder(context).create();

    alertDialog.setTitle(title);
    alertDialog.setMessage(message);
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            alertDialog.dismiss();
        }
    });

    alertDialog.show();
}

我应该把这个放在类定义之外吗?比如在removeSpaces方法之后?然后在onItemClick中调用showAlertDialog - Zolt
如果我理解正确,您想通过将其放入单独的类中来重用此函数?如果是这样,您可以创建一个名为MyUtil的类并将其放在其中。您可以通过传递参数从onItemClick中的任何活动调用它。 - Ravi1187342
警报消息仍未显示。我将您的代码放在一个类中,如下:public class Util extends Activity {},然后在SetPredictiononItemClick 中添加了 Util.showAlertDialog("testTitle", "testMssage", predictView.getContext()); 但是没有任何东西出现。 - Zolt
我几乎放弃了这个问题。经过两天的研究,似乎没有解决方案。问题出在我的程序结构上。我在按钮事件中有一个列表视图事件,并且为了使事情更加复杂,还涉及到活动组。我尝试的所有方法都会导致程序崩溃或无法显示对话框。但是你的代码在常规、更正常的情况下确实有效。所以还是感谢你的帮助。 - Zolt
@Ravi,AlertDialog 没有 dismiss 方法。你从哪里得到的这个信息? - The_Martian

0

尝试使用这些代码,而不是你的代码,只需要进行微小的更改:

AlertDialog.Builder builder = new AlertDialog.Builder(SetPrediction.this).create();
builder.setTitle("Change Status"); 
builder.setItems(items, new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface dialog, int item){ 
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); 
} 
});
builder.show();

同时导入以下内容:::

import android.app.AlertDialog; import android.content.DialogInterface;


这个无法构建。第3行出现以下错误:The method setItems(CharSequence[], new DialogInterface.OnClickListener(){}) is undefined for the type AlertDialog - Zolt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接