【问题标题】:Android grid gallery view errorAndroid 网格图库查看错误
【发布时间】:2016-03-24 20:32:21
【问题描述】:

我目前正在尝试让基于网格的画廊视图在我的一个片段上工作,但我遇到了这些错误

Error:(25, 20) error: onCreate(Bundle) in GalleryFragment cannot override onCreate(Bundle) in Fragment
attempting to assign weaker access privileges; was public
Error:(28, 9) error: cannot find symbol method setContentView(int)
Error:(30, 39) error: cannot find symbol method findViewById(int)
Error:(31, 43) error: incompatible types: GalleryFragment cannot be converted to Context

任何想法如何解决?我遵循的教程似乎旨在在一项活动中做到这一点,我不确定这是否会有所作为。谢谢

package com.test.test.app;


import android.content.Context;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;


public class GalleryFragment extends Fragment
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GridView gridView = (GridView)findViewById(R.id.gridview);
        gridView.setAdapter(new MyAdapter(this));
    }

    private class MyAdapter extends BaseAdapter
    {
        private List<Item> items = new ArrayList<Item>();
        private LayoutInflater inflater;

        public MyAdapter(Context context)
        {
            inflater = LayoutInflater.from(context);

            items.add(new Item("Image 1", R.drawable.image_1));
            items.add(new Item("Image 2", R.drawable.image_2));
            items.add(new Item("Image 3", R.drawable.image_3));
            items.add(new Item("Image 4", R.drawable.image_4));
            items.add(new Item("Image 5", R.drawable.image_5));
        }

        @Override
        public int getCount() {
            return items.size();
        }

        @Override
        public Object getItem(int i)
        {
            return items.get(i);
        }

        @Override
        public long getItemId(int i)
        {
            return items.get(i).drawableId;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup)
        {
            View v = view;
            ImageView picture;
            TextView name;

            if(v == null)
            {
                v = inflater.inflate(R.layout.gridview_item, viewGroup, false);
                v.setTag(R.id.picture, v.findViewById(R.id.picture));
                v.setTag(R.id.text, v.findViewById(R.id.text));
            }

            picture = (ImageView)v.getTag(R.id.picture);
            name = (TextView)v.getTag(R.id.text);

            Item item = (Item)getItem(i);

            picture.setImageResource(item.drawableId);
            name.setText(item.name);

            return v;
        }

        private class Item
        {
            final String name;
            final int drawableId;

            Item(String name, int drawableId)
            {
                this.name = name;
                this.drawableId = drawableId;
            }
        }
    }
}

【问题讨论】:

  • 它确实有所作为,如果您刚开始使用 android,那么您只需在活动中而不是在片段中执行此操作会更容易
  • @Sourabh 我知道,但它对于一项工作和导航抽屉片段似乎是最好的路线

标签: java android android-studio gridview


【解决方案1】:

您可以将代码从片段移动到活动,或者将您的 onCreate 替换为:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_main, container, false);
    GridView gridView = (GridView) view.findViewById(R.id.gridview);
    gridView.setAdapter(new MyAdapter(getActivity()));
    return view;
}   

【讨论】:

  • 谢谢,这摆脱了我的错误。该应用程序现在崩溃了,但一步一步地崩溃了。知道为菜鸟制作简单的网格画廊视图的好资源吗?
  • 一个简单的谷歌搜索给我this 看起来不错,但不使用片段:P
【解决方案2】:

Fragment 不提供context。因此你不能使用这个:

gridView.setAdapter(new MyAdapter(this));

应该是:

gridView.setAdapter(new MyAdapter(getActivity()));

注意:在onCreateonCreateViewFragment 中通过getActivity 获取活动上下文是不安全的,因为activity 可能尚未创建。尝试从onActivityCreated 调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多