>(),android,android-spinner"/>

首页 > 解决方案 > 如何使用 ArrayList 为 Spinner 制作 ArrayAdapter>()

问题描述

我刚刚与arraylist建立了联系,但我想将它展示到微调器中。我已经用 recyclerview 完成了,但这次我只想在微调器适配器中显示字符串“kode”(ITEMDATA0),然后从微调器中选择字符串“kode”,其余数据(nama、sp1、sp2 等)将显示在微调器下的edittext中。这是我的表单布局:

我的表单布局

这是我的程序:

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

编辑问题:如果我使用 ArrayList>,如何为 Spinner 制作 ArrayAdapter?同时我只希望数组中的 6 个数据中的 1 个显示在 Spinner (kode/ITEMDATA0) 中。

编辑:哦,是的,我使用了 ArrayList>,它必须与 ArrayList 不同,对吧?

标签: androidandroid-spinner

解决方案


要创建自定义微调器,您必须创建自定义适配器。
所以你必须为你的适配器创建一个类并从ArrayAdapter.
您还需要每个微调器项目的布局,因此您应该layout为微调器项目创建一个。
在设计布局并制作微调器项目后,您必须转到适配器类并覆盖一个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;
}}

完成本课程后,您可以将此适配器用于您的微调器


推荐阅读