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



即使getCount返回非空值(因为我出于试用目的对其进行硬编码),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);
}

并从创建视图调用它:

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

最新更新