Android - ListView适配器不在ListView中显示某些数据?

时间:2014-05-06 19:15:51

标签: java android listview android-listview adapter

我有一个ListView适配器,一个getter-setter类和一个显示ListView并进行查询的类。 这很完美但突然ListView开始只显示2个变量。其他项目显示为空白。

有人能指出我的错误吗?

ListView类

  public class ListViewAdapter extends BaseAdapter {

Context context;
LayoutInflater inflater;
ImageLoader imageLoader;
private List<JobsListItems> anunturiList = null;
private ArrayList<JobsListItems> arraylist;

public ListViewAdapter(Context context, List<JobsListItems> anunturiList) {
    this.context = context;
    this.anunturiList = anunturiList;
    inflater = LayoutInflater.from(context);
    this.arraylist = new ArrayList<JobsListItems>();
    this.arraylist.addAll(anunturiList);
    imageLoader = new ImageLoader(context);
}

public class ViewHolder {
    TextView name;
    TextView description;
    TextView createdAt;
    TextView offer;
    TextView date;
    ImageView jobPicture;
}

@Override
public int getCount() {
    return anunturiList.size();
}

@Override
public Object getItem(int position) {
    return anunturiList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

public View getView(final int position, View view, ViewGroup parent) {
    final ViewHolder holder;
    if (view == null) {
        holder = new ViewHolder();
        view = inflater.inflate(R.layout.listview_item, null);
        holder.name = (TextView) view.findViewById(R.id.rank);
        holder.description = (TextView) view.findViewById(R.id.description);
        holder.createdAt = (TextView) view.findViewById(R.id.population);
        holder.offer = (TextView) view.findViewById(R.id.offer_list);
        holder.date = (TextView) view.findViewById(R.id.date);
        // Locate the ImageView in listview_item.xml
        //holder.jobPicture = (ImageView) view.findViewById(R.id.img);
        view.setTag(holder);

    } else {
        holder = (ViewHolder) view.getTag();
    }
    holder.name.setText(anunturiList.get(position).getName());
    holder.description.setText(anunturiList.get(position).getDescription());
    holder.createdAt.setText(anunturiList.get(position).getCreatedAt());
    holder.offer.setText(anunturiList.get(position).getPrice());
    holder.date.setText(anunturiList.get(position).getDate());

    return view;
}

}

主要课程

 public class JobsListActivity extends BaseActivity {

public JobsListActivity() {
    super(R.string.app_name);
}

private List<ParseObject> anunturi;
private Dialog progressDialog;
ListView listview;
ListViewAdapter adapter;
private List<JobsListItems> anunturiList = null;
private String data;
private int limit =6;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listview_main);
    onCreateParse();
    ParseUser.enableAutomaticUser();
    ParseACL defaultACL = new ParseACL();
    defaultACL.setPublicReadAccess(true);
    ParseACL.setDefaultACL(defaultACL, true);
    new RemoteDataTask().execute();
    // registerForContextMenu(getListView());
    setSlide();
}

public class RemoteDataTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {

        JobsListActivity.this.progressDialog = ProgressDialog.show(
                JobsListActivity.this, "", "Loading...", true);

        super.onPreExecute();
    }

    protected Void doInBackground(Void... params) {
        anunturiList = new ArrayList<JobsListItems>();
        try {
            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                    "Anunturi");
            query.setCachePolicy(ParseQuery.CachePolicy.NETWORK_ELSE_CACHE);
            query.setLimit(limit);
            query.orderByDescending("_created_at");
            anunturi = query.find();
            for (ParseObject todo : anunturi) {
                data = String.valueOf(todo.getCreatedAt());
                JobsListItems map = new JobsListItems();
                map.setName("Job: " + (String) todo.get("jobName"));
                map.setDescription("Details: "
                        + (String) todo.get("jobDescription"));
                map.setCreatedAt((String) todo.get("Needs help: "
                        + "username"));
                map.setPrice((String) todo.get("Exchange: " + "jobPrice"
                        + "Dollars"));
                map.setDate((String) data);

                anunturiList.add(map);
                JobsListActivity.this.progressDialog.dismiss();
            }
        } catch (ParseException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(Void result) {
        listview = (ListView) findViewById(R.id.listview);
        adapter = new ListViewAdapter(JobsListActivity.this, anunturiList);
        listview.setAdapter(adapter);
        JobsListActivity.this.progressDialog.dismiss();

         listview.setOnScrollListener(new OnScrollListener() {

                @Override
                public void onScrollStateChanged(AbsListView view,
                        int scrollState) { 
                    int threshold = 1;
                    int count = listview.getCount();

                    if (scrollState == SCROLL_STATE_IDLE) {
                        if (listview.getLastVisiblePosition() >= count
                                - threshold) {
                            // Execute LoadMoreDataTask AsyncTask
                            new LoadMoreDataTask().execute();
                        }
                    }
                }

                @Override
                public void onScroll(AbsListView view, int firstVisibleItem,
                        int visibleItemCount, int totalItemCount) { 
                }
         });
}

private class LoadMoreDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        JobsListActivity.this.progressDialog = ProgressDialog.show(
                JobsListActivity.this, "", "Loading...", true);
    }

    @Override
    protected Void doInBackground(Void... params) {
        anunturiList = new ArrayList<JobsListItems>();
        try {

            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                    "Anunturi");
            query.orderByDescending("_created_at");
            query.setLimit(limit += 6);
            anunturi = query.find();
            for (ParseObject todo : anunturi) {
                data = String.valueOf(todo.getCreatedAt());
                JobsListItems map = new JobsListItems();
                map.setName("Job: " + (String) todo.get("jobName"));
                map.setDescription("Details: "
                        + (String) todo.get("jobDescription"));
                map.setCreatedAt((String) todo.get("Needs help: "
                        + "username"));
                map.setPrice((String) todo.get("Exchange: " + "jobPrice"
                        + "Dollars"));
                map.setDate((String) data);

                anunturiList.add(map);
            }
        } catch (ParseException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        // Locate listview last item
        int position = listview.getLastVisiblePosition();
        // Pass the results into ListViewAdapter.java
        adapter = new ListViewAdapter(JobsListActivity.this, anunturiList);
        // Binds the Adapter to the ListView
        listview.setAdapter(adapter);
        // Show the latest retrived results on the top
        listview.setSelectionFromTop(position, 0);
        progressDialog.dismiss();
    }
}

}

}

1 个答案:

答案 0 :(得分:0)

您是否确定未显示的其他值不为空?我会做一个简单的Log.v("VALUE", anunturiList.get(position).getCreatedAt());,并确保传入适配器的ArrayList没有这些字段的空值。

没有任何意义,为什么有两个值显示但其他值不是,除非这些值是空的。