繁体   English   中英

适配器有时会显示项目

[英]Adapter shows items sometimes

我有两个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()中将适配器设置为列表视图:

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

我的问题是该适配器只能工作几次。 当我将服务器从本地主机移到Web主机时,问题开始了。 该适配器不显示项目,因为它没有调用getView,因为ArrayList的大小为0。但是当我登录另一个适配器时,其大小也为0,但实际上工作得很好(后适配器)。

当我将膨胀的R.layout.comment_item更改为另一个时,它是第一次工作(但并非总是如此)。 问题很奇怪,我尝试了很多事情。 任何帮助都非常欢迎!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM