2012-04-05 24 views
2

Wer würde denken, ein Dialogfeld zum Anzeigen zu bekommen wäre so schwierig. In C# ist es so einfach. Ich habe überall nach Hilfe gesucht und jeder Tipp scheint mir Ärger zu machen. Kann jemand bitte den folgenden Code anschauen und mir sagen, wo ich vielleicht falsch gelaufen bin?Android-Dialog zeigt nicht

Was ich will, ist sehr einfach. Benutzer klickt auf die Schaltfläche. Dann erscheint die Liste. Dann klickt der Benutzer auf eines der Elemente in der Liste und der Dialog erscheint. Der Code in onItemClick im listview-Ereignis stammt von jemand anderem. Es funktioniert anscheinend für diese Person. Ich klicke und sehe nichts. Ich bin offen für Vorschläge, wie es zu beheben ist, oder neuen Code alle zusammen. Entschuldigung, das Protokoll hat keine Fehlermeldungen.

Bitte seien Sie spezifisch über, wo ich den Code als ich ein Android-Noob bin. Und danke im Voraus!

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

Das Problem ist in dem listView.setOnItemClickListener(new OnItemClickListener() Ereignisse. Das ist der Teil, der nicht funktioniert.

Antwort

1

Check out this:

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

Füge ich dies außerhalb der Klassendefinition? Also zum Beispiel nach der Methode 'removeSpaces'? Und dann 'showAlertDialog' aus' onItemClick' aufrufen? – Zolt

+0

Wenn ich verstehe, dass Sie diese Funktion wiederverwenden möchten, indem Sie sie in eine separate Klasse einfügen? Wenn das der Fall ist, können Sie eine Klasse mit dem Namen "MyUtil" erstellen und darin einfügen. Sie können es aus jeder Aktivität innerhalb von 'onItemClick' aufrufen, indem Sie die Parameter übergeben. – Ravi1187342

+0

Die Warnmeldung wird weiterhin nicht angezeigt. Ich lege deinen Code wie folgt in eine Klasse: public class Util erweitert die Aktivität {} 'und dann innerhalb von' onItemClick' in 'SetPrediction' habe ich' Util.showAlertDialog ("testTitle", "testMssage", predictView.getContext()) hinzugefügt ; 'aber nichts erscheint. – Zolt

0

Testen Sie diese Code anstelle des Codes nur eine geringfügige Änderung mit :::

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

auch die folgenden importieren :::

Import android.app.AlertDialog; importieren android.content.DialogInterface;

+0

Diese bauen nicht. Zeile 3 gibt den folgenden Fehler: 'Die Methode SetItems (CharSequence [], neue DialogInterface.OnClickListener() {}) ist nicht definiert für den Typ AlertDialog' – Zolt

+0

fügen Sie die Importe hinzu –