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;
}
}
答案 0 :(得分:2)
尝试将holder=(ViewHolder) convertView.getTag();
放入其他部分。将所有setText保留在else之外。
答案 1 :(得分:0)
这是你的问题
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
}