【发布时间】:2016-09-11 06:38:57
【问题描述】:
我已经设置了一个 Listview 与 BaseAdapter,到目前为止它与 setOnItemClickListener 一起工作正常。但这是硬编码。
Main2Activity.java
String sku[]={"1","2","3","4"};
String name[]={"Bad Food","Very Bad Food","Extremly Bad Food","Super Bad Food"};
String price[]={"99","999","9999","99999"};
String quantity[]={"123","456","789","101112"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new my_adapter(Main2Activity.this,sku,name,price,quantity));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(Main2Activity.this, "Sku->"+sku[i]
+" Name->"+name[i]
+" Price->"+price[i]
+" Quantity->"+quantity[i]
,Toast.LENGTH_SHORT).show();
}
});
}
my_adapter.java
public class my_adapter extends BaseAdapter {
Context ctx;
LayoutInflater inflater=null;
String sku[];
String name[];
String price[];
String quantity[];
public my_adapter(Context ctx, String sku[], String name[], String price[],String quantity[]){
this.ctx=ctx;
this.sku=sku;
this.name=name;
this.price=price;
this.quantity=quantity;
}
@Override
public int getCount() {
return sku.length;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View row=view;
if(row==null){
inflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(R.layout.rows,null);
}
TextView product_sku=(TextView)row.findViewById(R.id.sku);
TextView product_name=(TextView)row.findViewById(R.id.name);
TextView product_price=(TextView)row.findViewById(R.id.price);
TextView product_quantity=(TextView)row.findViewById(R.id.quantity);
product_sku.setText(sku[i]);
product_name.setText(name[i]);
product_price.setText(price[i]);
product_quantity.setText(quantity[i]);
return row;
}
}
接下来,我需要做一些类似的事情,即将 JsonArray 转换为 Array,然后在 setOnItemClickListener 中使用它。 这意味着,我需要将 json 中的所有数据存储到 4 个数组中,然后使用稍后单击该项目时的任何元素。就像我的硬编码示例一样。
我已经看到了一些使用 HashMap 以及一些 JsonArray 到数组模板编码的示例,但不知道如何将它们与我的 ListView 和 baseAdapter 结合起来。
获取 json 数据
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// working with HashMap or Arraylist?????
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsObjRequest);
localhost/web_service/ohno.php
{
"482":["1","Chicken Rice","1","1"], //Unique ID, sku,name,price,quantity
"483":["1","French Fries","1","1"],
"484":["1","apple","1","1"],
"492":["1","western+italian","1","1"],
"493":["1","no_cat","1","1"]
}
我在 Listview 中设置的格式与上述 Json 格式(4 列)完全相同,除了 Json 格式有一个额外的元素是唯一产品 ID。
【问题讨论】:
-
那么
org.json.JSONObjectAPI 中有什么不清楚的地方? -
@pskink stackoverflow.com/questions/39425837/… ysd 我已经问了一些相关的问题(简单的适配器),但其中一个主要是字符串。但是我上面的例子是 Array,有什么类似的例子吗?
-
好的,那么
org.json.JSONArrayAPI 中有什么不清楚的地方? -
你有
SimpleAdapter的工作解决方案,所以只需在setOnItemClickListener方法中使用该适配器 -
请阅读
AdapterAPI,提示:adapterView.getAdapter().getItem(positionInAdapter)