【问题标题】:Custom ListView Adapter displays no results自定义 ListView 适配器不显示结果
【发布时间】:2025-12-10 14:05:01
【问题描述】:

我正在使用 ListFragment 并通过从 BaseAdapter 扩展来准备自定义 ListView 适配器,我已经调用了在 Fragment 中设置适配器的方法,但 Listview 没有显示任何内容。 下面是我的自定义适配器和 ListFragment 类:

适配器:

package adapters;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.sarham.kabs.fruity.R;

/**
 * Created by Kabunyi Wanja on 22/03/2015.
 */
public class CategoriesListAdapter extends BaseAdapter{
    private Context context;

    public CategoriesListAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return 0;
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        CategoryViewHolder categoryViewHolder;
        if(convertView==null){
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.categories_list_custom_layout, parent, false);

            categoryViewHolder = new CategoryViewHolder();
            categoryViewHolder.category = (TextView)convertView.findViewById(R.id.tv_categories);
            convertView.setTag(categoryViewHolder);
        }
        else{
            categoryViewHolder = (CategoryViewHolder) convertView.getTag();
        }
        categoryViewHolder.category.setText("Category");
        //on testing, the below line never executes
        Log.d("ADAPTER", "Textview updated");

        return convertView;
    }
    //ViewHolder class
    public static class CategoryViewHolder{
        TextView category;
    }
}

LIstFragment:

package com.sarham.kabs.fruity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.ListFragment;
import android.support.v7.app.ActionBarDrawerToggle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import adapters.CategoriesListAdapter;

/**
 * Created by Kabunyi Wanja on 22/03/2015.
 */
public class CategoriesFragment extends ListFragment {
    private ListView categoriesListView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.categories_fragment, container, false);
        categoriesListView = (ListView)v.findViewById(android.R.id.list);
        setCategoriesListAdapter();
        Log.d("ADAPTER: ", "Adapter has been set for listview");

        return v;
    }
    //set adapter to categoriesListView
    public void setCategoriesListAdapter(){
        categoriesListView.setAdapter(new CategoriesListAdapter(getActivity()));
    }
}

【问题讨论】:

    标签: android listview baseadapter


    【解决方案1】:

    您的getCount() 方法返回零。这将导致 ListView 表现得好像没有数据一样。

    【讨论】:

      【解决方案2】:

      来自您的适配器:

      public int getCount() {
              return 0;
          }
      

      【讨论】:

      • 请解释为什么这对 OP 来说是个问题以及他应该如何解决它。那么这将是一个答案。
      • 我认为这是不言自明的。此方法应返回列表中的视图(行)计数。通常类似于return options.sizereturn options.length。但在 OP 案例中,他使用的是 CategoryViewHolder 类,并重用了一些视图(?),所以他应该弄清楚应用程序应该显示多少视图。
      最近更新 更多