【问题标题】:Adapter shows items sometimes适配器有时会显示项目
【发布时间】:2016-01-28 12:47:33
【问题描述】:

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

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

我将 Adapter 设置为 Answers 活动的 onCreate() 中的列表视图:

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

我用同样的方式设置列表视图。

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

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

当我将 inflate R.layout.comment_item 更改为另一个时,它第一次起作用(但并非总是如此)。 这个问题很奇怪,我已经尝试了很多东西。非常欢迎任何帮助!

【问题讨论】:

  • 你在哪里设置适配器
  • 您能否描述您的问题,因为它需要更多细节才能理解。描述两个适配器以及将两个适配器设置为列表的位置。
  • 对不起,我希望现在更好

标签: android baseadapter


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2023-03-17
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多