android - 自定义 ListView 不显示数据

标签 android listview android-arrayadapter android-adapter

我的自定义 ListView 不显示任何数据,我已尝试重新编码适配器和其他所有内容,但没有骰子。

它甚至没有显示任何错误,这让我发疯哈哈。谁能帮我调试我的代码。

这是我的 Activity :

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

提前感谢您的帮助!

最佳答案

问题:网络请求需要时间,但是当列表中没有数据时您正在创建适配器,因此您需要告诉适配器数据发生变化

adapter 引用移到 onCreate 之外

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

您可以在 showJSON 函数末尾的 listview 上创建和设置 adapter

关于android - 自定义 ListView 不显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44229659/

相关文章:

Android AdMob 横幅广告未显示

c# - 单击 ListBoxItem 区域内的任何控件时触发器 SelectedIndex 发生更改

listview - 如何在javafx中获得透明 ListView ?

android - 在 ListView 的 ArrayAdapter<String> 中删除项目

android - 与 Fresco 共享元素过渡动画

android - ProgressBar.setProgress 抛出异常

Android 方向在第一次转动后不会改变

c# - SelectedItem 更改文本 block 变量

添加新项目时,Android listView 不会更新

android - 如何使用数组适配器更改 ListView 项布局的背景颜色?