自定义列表不显示数据
问题描述:
我的自定义列表视图不显示任何数据,我试图重新编码适配器和其他一切,但没有骰子。自定义列表不显示数据
它甚至没有显示任何错误,这就是让我疯狂的哈哈。任何人都可以帮助我调试我的代码。
这是我的活动:
private ListView listView;
private ArrayList<String> orderName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_orders_page);
orderName = new ArrayList<>();
ListView listView = (ListView) findViewById(R.id.listViewOrder);
viewOrderAdapter adapter = new viewOrderAdapter(viewOrdersPage.this, orderName);
listView.setAdapter(adapter);
getBoxInformation();
}
private void getBoxInformation() {
final ProgressDialog loading = ProgressDialog.show(this, "GETTING BOX INFROMATION", "Processing Request...", false, false);
String url = DATA_URL + textUsername.getText().toString().trim();
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
showJSON(response);
loading.dismiss();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(viewOrdersPage.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private void showJSON(String response) {
String name = "";
try {
jsonObject = new JSONObject(response);
result = jsonObject.getJSONArray(JSON_ARRAY);
order = result.getJSONObject(0);
name = order.getString(TAG_ORDERNAME);
JSONArray jsonarray = new JSONArray(name);
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject jsonobject = jsonarray.getJSONObject(i);
names = jsonobject.getString("name");
//THE TOAST DISPLAYS THE TEXT SO I KNOW THE CODE WORKS, EXCEPT THE LISTVIEW
Toast.makeText(viewOrdersPage.this, names, Toast.LENGTH_LONG).show();
orderName.add(names);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
这是适配器类:
public class viewOrderAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> orderName;
public viewOrderAdapter(Context context, ArrayList<String> orderName){
this.context = context;
this.orderName = orderName;
}
@Override
public int getCount() {
return orderName.size();
}
@Override
public Object getItem(int position) {
return orderName.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final View listView;
final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listView = inflater.inflate(R.layout.view_orders_item, null);
TextView name = (TextView) listView.findViewById(R.id.orderNames);
name.setText(orderName.get(position));
return listView;
}
}
感谢您的帮助提前!
答
问题:所以你需要告诉适配器有数据的变化外onCreate
移动adapter
参考网络请求将需要时间,但要创建的适配器时出现在列表中没有数据
private ArrayList<String> orderName;
private viewOrderAdapter adapter ; // adapter reference
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_orders_page);
orderName = new ArrayList<>();
ListView listView = (ListView) findViewById(R.id.listViewOrder);
adapter = new viewOrderAdapter(viewOrdersPage.this, orderName);
listView.setAdapter(adapter);
getBoxInformation();
}
然后,在showJSON
函数的末尾添加adapter.notifyDataSetChanged()
或
您可以创建并在listview
设置adapter
在showJSON
功能
答
结束这活动:
private ListView listView;
private ArrayList<String> orderName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_orders_page);
orderName = new ArrayList<>();
ListView listView = (ListView) findViewById(R.id.listViewOrder);
getBoxInformation();
}
private void setDataInList(){
viewOrderAdapter adapter = new viewOrderAdapter(viewOrdersPage.this, orderName);
listView.setAdapter(adapter);
}
private void getBoxInformation() {
final ProgressDialog loading = ProgressDialog.show(this, "GETTING BOX INFROMATION", "Processing Request...", false, false);
String url = DATA_URL + textUsername.getText().toString().trim();
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
showJSON(response);
loading.dismiss();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(viewOrdersPage.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private void showJSON(String response) {
String name = "";
try {
jsonObject = new JSONObject(response);
result = jsonObject.getJSONArray(JSON_ARRAY);
order = result.getJSONObject(0);
name = order.getString(TAG_ORDERNAME);
JSONArray jsonarray = new JSONArray(name);
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject jsonobject = jsonarray.getJSONObject(i);
names = jsonobject.getString("name");
//THE TOAST DISPLAYS THE TEXT SO I KNOW THE CODE WORKS, EXCEPT THE LISTVIEW
Toast.makeText(viewOrdersPage.this, names, Toast.LENGTH_LONG).show();
orderName.add(names);
}
if(orderName.size()>0){
setDataInList();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
这是适配器类:
public class viewOrderAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> orderName;
public viewOrderAdapter(Context context, ArrayList<String> orderName){
this.context = context;
this.orderName = orderName;
}
@Override
public int getCount() {
return orderName.size();
}
@Override
public Object getItem(int position) {
return orderName.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View listView;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listView = inflater.inflate(R.layout.view_orders_item, null);
TextView name = (TextView) listView.findViewById(R.id.orderNames);
name.setText(orderName.get(position));
return listView;
}
+0
嘿,先生我已经得到了答案,我错过了** adapter.notifydatasetchanged **哈哈。无论如何感谢您的帮助先生你应得和upvote! –
+0
感谢并始终欢迎。 –
是的,先生你是对的,让我等五分钟接受你的答案哈哈。我想编码8小时直接真的打大脑哈哈。谢谢先生! –