2016-08-25 21 views
0

私のデータベースから状態リストを取得します。リストをJSON形式で取得します。
すべての州をArrayList<String>に追加します。
今、アダプタを使用してAlertDialogに状態の完全なリストを表示したいとします。AlertDialogにArrayListを表示

しかし、私は、アダプタにArrayListを設定し、そのアダプタをbuilder.setAdapter();で使用すると、私のArrayListの最後の項目を表示します。すなわち、完全なArrayListのうちの1つの値だけである。

どうすればよいですか?以下

私のコードは

JSONObject jsonObject = new JSONObject(response.body().string()); 
Log.d("JSON", String.valueOf(jsonObject)); 
JSONArray jsonArray = jsonObject.getJSONArray("states"); 

for(int i=0; i<jsonArray.length(); i++) { 
    stateList = new ArrayList<String>(); 
    JSONObject jobjstate = jsonArray.getJSONObject(i); 

    states = jobjstate.getString("state_name"); 

    stateList.add(states); 
    stateAdapter = new ArrayAdapter<String>(UserRegister.this, android.R.layout.simple_spinner_dropdown_item, stateList); 
} 

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     AlertDialog.Builder builder = new AlertDialog.Builder(UserRegister.this); 

     View customTitle = View.inflate(getApplicationContext(), R.layout.custom_dialog_state, null); 
     builder.setCustomTitle(customTitle); 

     builder.setAdapter(stateAdapter, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       etregstate.setTextColor(getResources().getColor(R.color.black)); 
       etregstate.setText(stateList.get(which)); 
       dialog.dismiss(); 
      } 
     }); 
     AlertDialog alertDialog = builder.create(); 
     ListView listView = alertDialog.getListView(); 
     listView.setDivider(new ColorDrawable(getResources().getColor(R.color.purple))); 
     listView.setDividerHeight(2); 
     alertDialog.show(); 
    } 
}); 
+1

あなたの問題は、forループで毎回1つのアイテムの新しいアダプタを作成することです...これはAndroidの問題ではありません –

答えて

1

でうまくいけば、これは私が問題はあなたが新しい配列アダプタを毎回作成している、ここで

for(int i=0; i<jsonArray.length(); i++) { 
    stateList = new ArrayList<String>(); 
    JSONObject jobjstate = jsonArray.getJSONObject(i); 

    states = jobjstate.getString("state_name"); 

    stateList.add(states); 
    /* This line */ 
    stateAdapter = new ArrayAdapter<String>(UserRegister.this, android.R.layout.simple_spinner_dropdown_item, stateList); 
} 

だと思う問題

stateList = new ArrayList<String>(); 

for(int i=0; i<jsonArray.length(); i++) { 
    JSONObject jobjstate = jsonArray.getJSONObject(i); 
    states = jobjstate.getString("state_name"); 
    stateList.add(states); 
} 

stateAdapter = new ArrayAdapter<String>(UserRegister.this, android.R.layout.simple_spinner_dropdown_item, stateList); 
+0

私はこれを試しました。それは私の問題を解決しません –

+0

どうしてですか?以前は要素を1つしか表示していなかったという事実を完全に記述しています。だから、あなたは問題が何であるかについてもっと明確にしてください。 –

+0

はい、あなたは正しいです。もう一度同じ変更を加えてみました。 stateAdapterをfinalとして作成します。ループからArrayAdapterを作成します。そしてそれは働く。ありがとうございました。 –

0

を修正ループします。ループから取り出して、それが動作すれば私に知らせてください! :)

+0

それは動作します。ループの後にstateAdapterを作成する必要があります。私はその問題を理解している。いくつかの変更の後、それは動作します。ありがとうございました –

0

私は上記の質問をします。いくつかの変更の後、私は解決策を得ました。他のユーザーのヘルプのソリューションコードを投稿しています。

ありがとうございます。

JSONObject jsonObject = new JSONObject(response.body().string()); 
       Log.d("JSON", String.valueOf(jsonObject)); 

       success = jsonObject.getInt(MateAppsConstants.TAG_SUCCESS); 

       Log.d("Success", String.valueOf(success)); 

       if (success == 1) { 
        JSONArray stateJSON = null; 
        stateJSON = jsonObject.getJSONArray(MateAppsConstants.TAG_STATE); 

        stateList = new ArrayList<String>(); 

        for (int i=0; i<stateJSON.length(); i++) { 
         JSONObject jobjstate = stateJSON.getJSONObject(i); 
         states = jobjstate.getString(MateAppsConstants.TAG_STATENAME); 
         Log.d("State List", states); 

         if (states != null) 
          stateList.add(states); 
        } 
       } else { 
        msg = jsonObject.getString(MateAppsConstants.TAG_MESSAGE); 
        Log.d("No State Found", msg); 
       } 

       final ArrayAdapter<String> stateAdapter = new ArrayAdapter<String>(UserRegister.this, android.R.layout.simple_spinner_dropdown_item, stateList); 

       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         AlertDialog.Builder builder = new AlertDialog.Builder(UserRegister.this); 
         View customTitle = View.inflate(getApplicationContext(), R.layout.custom_dialog_state, null); 
         builder.setCustomTitle(customTitle); 

         builder.setAdapter(stateAdapter, new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           etregstate.setTextColor(getResources().getColor(R.color.black)); 
           etregstate.setText(stateList.get(which)); 
           dialog.dismiss(); 
          } 
         }); 
         AlertDialog alertDialog = builder.create(); 
         ListView listView = alertDialog.getListView(); 
         listView.setDivider(new ColorDrawable(getResources().getColor(R.color.purple))); 
         listView.setDividerHeight(2); 
         alertDialog.show(); 
        } 
       }); 
関連する問題