android - 如何使用 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 不同,对吧?
解决方案
要创建自定义微调器,您必须创建自定义适配器。
所以你必须为你的适配器创建一个类并从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;
}}
完成本课程后,您可以将此适配器用于您的微调器
推荐阅读
- asp.net-core - 如何用 ASP.NET 核心中的空集合替换输入模型中的空集合
- javascript - 获取未匹配到单个数组中的数组元素的结果
- spring-batch - Spring 批处理元表的 BATCH_JOB_INSTANCE 中的 VERSION 列是什么?
- javascript - 制表符中的复选框
- javascript - 从文档流中删除元素
- c++ - 我可以把虚函数中的这个指针当作派生类的这个指针吗
- angular - 在 Angular 7 中为不同的客户加载不同的索引文件
- android - 航点任务没有暂停
- c# - 当我想为单元格设置值时未处理的异常
- svg - 如何使用 svg 创建多边形?