Как сделать ArrayAdapter для Spinner с ArrayList > () - PullRequest
0 голосов
/ 05 марта 2020

Я только что установил связь с arraylist, но я хочу показать это в счетчик. Я уже сделал это с помощью recyclerview, но на этот раз я хочу показать только String "kode" (ITEMDATA0) в адаптере счетчика, а после выбора String "kode" из счетчика, остальные данные (nama, sp1, sp2, et c) будет отображаться в тексте редактирования под счетчиком. Вот мой макет формы:

Мой макет формы

Вот моя программа:

private void showItem(){
   list.clear();
   JSONObject jsonObject = null;
   //ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();
   try {
       jsonObject = new JSONObject(JSON_STRING);
       JSONArray result = jsonObject.getJSONArray(Item_Konfigurasi.TAG_JSON_ARRAY);

       for(int i = 0; i<result.length(); i++){
           JSONObject jo = result.getJSONObject(i);
           final String id = jo.getString(Item_Konfigurasi.TAG_ITEMXCODE);
           final String kode = jo.getString(Item_Konfigurasi.TAG_ITEMDATA0);
           final String nama = jo.getString(Item_Konfigurasi.TAG_ITEMDATA1);
           final String sp1 = jo.getString(Item_Konfigurasi.TAG_ITEMDATA2);
           final String sp2 = jo.getString(Item_Konfigurasi.TAG_ITEMDATA3);
           final String ket = jo.getString(Item_Konfigurasi.TAG_ITEMDATA4);

           HashMap<String,String> item = new HashMap<>();
           item.put(Item_Konfigurasi.TAG_ITEMXCODE,id);
           item.put(Item_Konfigurasi.TAG_ITEMDATA0,kode);
           item.put(Item_Konfigurasi.TAG_ITEMDATA1,nama);
           item.put(Item_Konfigurasi.TAG_ITEMDATA2,sp1);
           item.put(Item_Konfigurasi.TAG_ITEMDATA3,sp2);
           item.put(Item_Konfigurasi.TAG_ITEMDATA4,ket);

           list.add(item);
       }

       //THIS WILL BE THE PLACE FOR CUSTOM SPINNER ADAPTER

       /*CustomAdapter mAdapter = new CustomAdapter(Transaksi_Add.this,
               R.layout.listspinnertransaksi_layout, R.id.title, list);
       mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));
       mRecyclerView.setAdapter(mAdapter);*/

   } catch (JSONException e) {
       e.printStackTrace();
   }
}

private void getJSON(){
   class GetJSON extends AsyncTask<Void,Void,String> {

       ProgressDialog loading;
       @Override
       protected void onPreExecute() {
           super.onPreExecute();

       }

       @Override
       protected void onPostExecute(String s) {
           super.onPostExecute(s);

           JSON_STRING = s;
           showItem();
       }

       @Override
       protected String doInBackground(Void... params) {
           RequestHandler rh = new RequestHandler();
           String s = rh.sendGetRequest(Item_Konfigurasi.URL_GET_ALL);
           return s;
       }
   }
   GetJSON gj = new GetJSON();
   gj.execute();
}

Редактировать вопрос: Как создать ArrayAdapter для Spinner если бы я использовал ArrayList>? тем временем я просто хочу, чтобы 1 из 6 данных в массиве отображался в Spinner (kode / ITEMDATA0) ..

Редактировать: о да, я использовал ArrayList>, он должен отличаться от ArrayList, верно?

Ответы [ 2 ]

1 голос
/ 05 марта 2020

1.первое объявление строки ArrayList: -

ArrayList<String> label = new ArrayList<String>();

2.второй вызов API и получение данных с использованием retrofit

private void list_API() {
        label .clear();

        callapi().enqueue(new Callback<GetModel>() {
            @Override
            public void onResponse(Call<GetModel> call, Response<GetModel> response) {
                if (response.body().getStatus().equals("error")) {

                } else {
                    List<List> getlistdata = fetchResultsSort(response);

                    for (int i = 0; i < getlistdata.size(); i++) {

                        label.add(getlistdata.get(i).getLabel());
                        Log.e("sort_innerrr_label", "" + getlistdata.get(i).getLabel());
                    }
                     ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(parent, R.layout.simple_spinner_item, label);
                            spinnerArrayAdapter.setDropDownViewResource(R.layout.simple_spinner_item); // The drop down view
                            spinnerview.setAdapter(spinnerArrayAdapter);

                }
            }
            @Override
            public void onFailure(Call<GetSortModel> call, Throwable t) {
            }
        });
    }

3.Третий набор SpinView setOnItemSelectedListener и выберите, чтобы получить метку

spinnerview.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                int selected_item_position = spinnerview.getSelectedItemPosition();
                String selected = label.get(selected_item_position);
                Log.e("selected_name", "" +selected);

            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });
1 голос
/ 05 марта 2020

для создания пользовательского блесна вы должны создать собственный адаптер.
, поэтому вы должны создать класс для вашего адаптера и простирается от ArrayAdapter.
, также вам нужен макет для каждого элемента блесны, так что Вы должны создать layout для элемента spinner.
после того, как вы спроектируете макет и сделаете элемент spinner, вы должны go адаптировать класс и переопределить метод getview. В этом методе вы должны вернуть объект представления.
псевдокод класса адаптера приведен ниже:

public class adapter extends ArrayAdapter<OBJECT MUST BE SHOW IN SPINNER>{

public adapter(@NonNull Context context , @NonNull List objects) 
{
    super(context, R.layout.YOUR CUSTOM LAYOUT , objects);
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) 
{
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(YOUR CUSTOM LAYOUT , null , false);

    //you can fill you'r view item according to list of object and position 

    return convertView;
}}

после завершения этого класса вы можете использовать этот адаптер для своего счетчика

...