适配器有时显示项目

时间:2016-01-28 12:47:33

标签: android baseadapter

我有两个BaseAdapter,一个用于帖子,另一个用于帖子的答案。第一个很好用,并显示项目。当我按下以查看帖子的答案时,另一个适配器完成工作(AnswerAdapater):

public AdapterAnswers(Context context, ArrayList<HashMap<String, String>> list) {
    this.context=context;
    searchArrayList=list;
    inflater = ((Activity) context).getLayoutInflater();
}
 @Override
public int getCount() {
    if (searchArrayList != null)
        return searchArrayList.size();
    else return 5;
}


 public View getView(final int position, View convertView, ViewGroup parent) {
    View view = convertView;
    dataofaRow = searchArrayList.get(position);
    if (view == null) {
        view = inflater.inflate(R.layout.comment_item, parent, false); 
        Log.d("Converview", "null" + view.getTag());

    }
    TextView comment= (TextView) view.findViewById(R.id.txt_comment);
    comment.setText(dataofaRow.get(TAG_POSTTEXT));
    return view;}

我将适配器设置为Answers活动的onCreate()中的listview:

 Bundle extras = getIntent().getExtras();
    String id=extras.getString("id");

    ReadAnswers readAnswers=new ReadAnswers();
    answerData=readAnswers.returnparam(id);

    adapter=new AdapterAnswers(this,answerData);
    listView.setAdapter(adapter);

另一个适配器(MyAdapter)基本相同:

public MyAdapter(Context context, ArrayList<HashMap<String, String>> list) {
    this.context=context;
    searchArrayList=list;
    inflater = ((Activity) context).getLayoutInflater();
public int getCount() {
    if (searchArrayList != null)
        return searchArrayList.size();
    else return 5;
}
 @Override
public View getView(final int position, final View convertView, ViewGroup parent) {
    View view = convertView;
    dataofaRow = searchArrayList.get(position);

    if (view == null) {
        view = inflater.inflate(R.layout.comment_item, parent, false); // <-- parent as second argument

    }
    TextView comment= (TextView) view.findViewById(R.id.txt_comment);
seeAnswers.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            dataofaRow = searchArrayList.get(position);
            String idOfComment=dataofaRow.get(TAG_ID);
            Intent intent=new Intent(context, Answers.class);
            intent.putExtra("id", idOfComment);
            context.startActivity(intent);


        }
    });
    return view;}

我以同样的方式设置了listview。

 ReadPosts redPosts=new ReadPosts();
    allTheData=redPosts.returnparam("Request all the data");
    myAdapter= new MyAdapter(this,allTheData);
    listView.setAdapter(myAdapter);

我的问题是这个适配器只运行了几次。当我将服务器从localhost移动到Web主机时,问题就出现了。 此适配器不显示项目,因为它不调用getView,因为ArrayList显示为大小0.但是当我记录另一个适配器时,大小也是0但实际上它运行良好(后适配器)。

当我将R.layout.comment_item更改为另一个时,它首次运行(但并非总是如此)。 问题很奇怪,我尝试过很多东西。非常欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

将此代码替换为您的适配器类

public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder;

    if(converView == null){
       viewHolder = new ViewHolder();
       convertView = inflater.inflate(R.layout.comment_item, parent, false); 

       viewHolder.comment = (Textview) convertView.findViewById(R.id.txt_comment);
       viewHolder.comment.setTag(position);

       convertView.setTag(viewHolder);
    } else {
       viewHolder = (ViewHolder)convertView.getTag();
    }

       viewHolder.comment.setText(dataofaRow.get(TAG_POSTTEXT));
       return convertView();
    }

    private class ViewHolder{
        TextView comment;
    }