Listview不会填充unitl滚动

时间:2016-03-08 05:05:23

标签: android listview android-volley

android listview使用自定义适配器扩展ArrayAdapter不会填充列表项,直到它滚动我还调用了adpater上的适配器notifyDataSetChanged方法上的方法但是这仍然不起作用我的代码 这是MainActivity文件

public class MainActivity extends AppCompatActivity {

ListView list;

RequestQueue requestQueue;
private CustomAdapter mCustomAdpater;
Button insert, show;
private List<RowItem> userList = new ArrayList<>();
//String insertUrl = "http://192.168.0.107:8000/athlete/insert.php";
String showUrl = "http://192.168.0.107:8000/athlete/show.php";

@Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    show = (Button) findViewById(R.id.show);
    insert = (Button) findViewById(R.id.register);
    list = (ListView) findViewById(R.id.list);
    mCustomAdpater = new CustomAdapter(this, R.layout.list_row, userList);


    requestQueue = Volley.newRequestQueue(getApplicationContext());
    show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCustomAdpater.clear();
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
                    showUrl, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    //JSONArray users = null;
                    try {

                        JSONArray users = response.getJSONArray("users");
                        for (int i=0; i<users.length(); i++){
                            JSONObject user = users.getJSONObject(i);

                            int id = user.getInt("id");
                            String name = user.getString("name");
                            String sports = user.getString("sports");
                            String location = user.getString("location");
                            String number = user.getString("number");

                            RowItem newRowItem = new RowItem(id, name, sports, location, number);
                            userList.add(newRowItem);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                    mCustomAdpater.notifyDataSetChanged();
                    list.setAdapter(mCustomAdpater);
                    Log.d("onResponse CALLED", "OK");
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("Error ", showUrl);
                }
            });
            requestQueue.add(jsonObjectRequest);
        }
    });
}

这是我的自定义适配器

public class CustomAdapter extends ArrayAdapter<RowItem> {
Context context;
public CustomAdapter(Context context, int resourceId, List<RowItem> items){
    super(context, resourceId, items);
    this.context = context;
}

private class ViewHolder{
    TextView name;
    TextView sports;
    TextView location;
    TextView number;
}

public View getView(int position, View convertView, ViewGroup parent){
    ViewHolder holder = null;
    RowItem rowItem = getItem(position);

    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(MainActivity.LAYOUT_INFLATER_SERVICE);
    if (convertView==null){
        convertView = mInflater.inflate(R.layout.list_row, null);
        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(R.id.user_name);
        holder.sports = (TextView) convertView.findViewById(R.id.user_sports);
        holder.location = (TextView) convertView.findViewById(R.id.user_location);
        holder.number = (TextView) convertView.findViewById(R.id.user_contact);
        convertView.setTag(holder);
    }else{
        holder = (ViewHolder) convertView.getTag();
        holder.name.setText(rowItem.getName());
        holder.sports.setText(rowItem.getSports());
        holder.location.setText(rowItem.getLocation());
        holder.number.setText(rowItem.getNumber());
    }
    return convertView;
}

}

2 个答案:

答案 0 :(得分:2)

尝试将holder=(ViewHolder) convertView.getTag();放入其他部分。将所有setText保留在else之外。

答案 1 :(得分:0)

这是你的问题

distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip

}