getView 永远不会被称为网格视图适配器,即使我的 getCount returns 是一个非空值,

getView is never getting called grid view adapter even though my getCount returns a non null value,

即使 getCount returns 是一个非空值(因为我出于试用目的对它进行了硬编码),getView 也永远不会被调用,但仍然没有运气,每个其他答案都说 getCount 可能返回 0 但有没有其他原因可能无法调用 getView。

这是网格视图适配器:

public class EmoticonsAdapter extends BaseAdapter {
    private Context context;
    private int layoutResourceId;
    private ArrayList<String> data;

    public EmoticonsAdapter(Context context, int layoutResourceId, ArrayList<String> data) {

        this.context = context;
        this.layoutResourceId = layoutResourceId;
        this.data = data;
    }


    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        View row = view;


        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(R.layout.emoticons_item, viewGroup, false);
        final String path = data.get(position);

        ImageView image = (ImageView) row.findViewById(R.id.item);
        image.setImageBitmap(getImage(path));


        return row;
    }

    @Override
    public int getCount() {
        int size = data.size();
        return 54;
    }

    @Override
    public String getItem(int position) {
        return data.get(position);
    }

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


    private Bitmap getImage(String path) {
        AssetManager mngr = context.getAssets();
        InputStream in = null;

        try {
            in = mngr.open("emoticons/" + path);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //BitmapFactory.Options options = new BitmapFactory.Options();
        //options.inSampleSize = chunks;

        Bitmap temp = BitmapFactory.decodeStream(in, null, null);
        return temp;
    }

}

我在 onAttach 方法中从片段实例化它。也尝试使用 onCreateView 但不起作用。

public class FragmentTab extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_one, container, false);

        setupstuff();

        return v;


    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        //setupstuff();
    }


    void setupstuff() {
        Activity activity = getActivity();
        LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(
                R.layout.fragment_one, null);

        GridView grid = (GridView) layout.findViewById(R.id.emoticons_grid);

        ArrayList<String> paths = new ArrayList<String>();

        for (short i = 1; i <= 54; i++) {
            paths.add(i + ".png");
        }

        EmoticonsAdapter adapter = new EmoticonsAdapter(
                getActivity().getBaseContext(), R.layout.emoticons_item, paths);
        grid.setAdapter(adapter);


    }

}


The emoticons_item has a image view with it "item".

问题就在这里

void setupstuff() {
    Activity activity = getActivity();
    LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(
            R.layout.fragment_one, null);

您正在扩充一个新视图,并且您在 onCreateView 中返回的 GridView 与扩充后的视图不同。

更改设置,例如

void setupstuff(View layout) {
    GridView grid = (GridView) layout.findViewById(R.id.emoticons_grid);
    ArrayList<String> paths = new ArrayList<String>();

    for (short i = 1; i <= 54; i++) {
        paths.add(i + ".png");
    }

    EmoticonsAdapter adapter = new EmoticonsAdapter(
            getActivity().getBaseContext(), R.layout.emoticons_item, paths);
    grid.setAdapter(adapter);
}

并从 onCreateView 调用它:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_one, container, false);
    setupstuff(v);
    return v;
}