2016-08-25 4 views
0

Я извлекаю список состояний из своей базы данных. Я получаю список в виде JSON.
Я добавляю все состояния в ArrayList<String>.
Теперь я хочу отобразить этот полный список состояний в AlertDialog с помощью адаптера.Показать ArrayList в AlertDialog

Но когда я устанавливаю ArrayList в адаптер и использую этот адаптер в builder.setAdapter();, он отображает последний элемент моего ArrayList; то есть только одно значение из полного массива ArrayList.

Я не знаю, как это сделать?

ниже мой код

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

Ваша проблема заключается в том, что вы создаете новый адаптер одного элемента каждый раз через цикл ... Это не Android проблема –

ответ

1

Надеется, что это устраняет проблему

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

Почему бы и нет? Он прекрасно описывает тот факт, что вы показываете только один элемент раньше. Итак, можете ли вы, пожалуйста, уточнить, в чем проблема? –

+0

Да, вы правы. Я снова попробовал то же самое решение, которое вы даете с некоторыми изменениями. Я делаю свой stateAdapter окончательным. и создайте ArrayAdapter из цикла. и это работает. Спасибо. –

0

Я думаю, что проблема здесь

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

Вы создаете новый адаптер массива каждый раз, вы петляете. Просто вытащите его из цикла и дайте мне знать, если это сработает! :)

+0

It Works. Я должен создать 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(); 
        } 
       });