当前位置: 首页 > 知识库问答 >
问题:

Android GridView第一项背景不工作

秦阳旭
2023-03-14

我想设置网格视图的自定义背景,但是当网格加载时,网格背景的第一个项目没有加载,并且其余所有项目都正确加载。以下是我的代码,所以请帮忙。

    public class PicassoExample extends Activity {

    private GridView gvFirst;
    private ArrayList<MyModel> arrayList;
    private PicassoImageAdapter adapter;

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

        gvFirst = (GridView)findViewById(R.id.gvFirst);
        arrayList = new ArrayList<MyModel>();

        loadArraylist();

        adapter = new PicassoImageAdapter(getApplicationContext(),arrayList);
        gvFirst.setAdapter(adapter);
    }
    private void loadArraylist() {
        arrayList.add(new MyModel("http://i.imgur.com/rFLNqWI.jpg"));
        arrayList.add(new MyModel("http://i.imgur.com/C9pBVt7.jpg"));
        arrayList.add(new MyModel("http://i.imgur.com/rT5vXE1.jpg"));
    }
}

这是我的适配器类。

    public class PicassoImageAdapter extends BaseAdapter {
    private Context context;
    private LayoutInflater inflater;
    private ArrayList<MyModel> arrayList;

    public PicassoImageAdapter(Context applicationContext, ArrayList<MyModel> arrayList) {
        context = applicationContext;
        this.arrayList = arrayList;
    }
    @Override
    public int getCount() {
        return arrayList.size();
    }
    @Override
    public Object getItem(int position) {
        return position;
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    class Holder {
        ImageView imageView;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View myView = null;
        try {
            Holder holder;
            myView = convertView;

            if (myView == null) {

                inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                myView = inflater.inflate(R.layout.adapter_picasso, null);
                holder = new Holder();

                // here I am setting custom backgroud of each item of gride.
                myView.setBackgroundResource(R.drawable.corner_gride_layout);

                holder.imageView = (ImageView) myView.findViewById(R.id.imageView);
                myView.setTag(holder);
            }
            else {
                holder = (Holder) myView.getTag();
            }

            MyModel model = arrayList.get(position);
            Picasso.with(this.context)
                    .load(model.getStrUrl())
                    .placeholder(R.drawable.ic_launcher)
                    .into(holder.imageView);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return myView;
    }
}

这是适配器的 xml。

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        />
</LinearLayout>

实际上,我用毕加索图书馆从互联网上下载照片。我已经为网格视图的每一项创建了自定义背景,但当网格视图首先加载时,只有网格的第一项(网格的零位置)不工作,网格视图的所有背景项都设置正确。

共有3个答案

裴兴言
2023-03-14

当在getView()中convertView不为null时,可以只返回它。

if(convertView != null){
    return convertView
}
*Here is what you want to let view do*
施权
2023-03-14

我已经使用下面的代码解决了我的问题。

@Override
public View getView(int position, View convertView, ViewGroup parent) {


    View myView = null;
    try {
        Holder holder;
        myView = convertView;

        if (myView == null) {

            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            myView = inflater.inflate(R.layout.adapter_picasso, null);
            holder = new Holder();

            holder.imageView = (ImageView) myView.findViewById(R.id.imageView);
            myView.setTag(holder);
        }
        else {
            holder = (Holder) myView.getTag();
        }
        if(Build.VERSION.SDK_INT>15)
        {
            myView.setBackground(ContextCompat.getDrawable(context, R.drawable.corner_gride_layout));
        }
        else {
            myView.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.corner_gride_layout));
        }

        MyModel model = arrayList.get(position);

        Picasso.with(this.context)
                .load(model.getStrUrl())
                .placeholder(R.drawable.ic_launcher)
                .into(holder.imageView);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return myView;
}
安高义
2023-03-14

第一次调用getView方法时,父视图的宽度和高度为零。也许你可以获取屏幕内容的宽度和高度来设置它们的值。在my view = inflater . inflate(r . layout . adapter _ Picasso,null)后添加这几行代码;

myView.setLayoutParams(new  
AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,   
AbsListView.LayoutParams.MATCH_PARENT));
 类似资料:
  • 我正在使用V3。3.6的引导,我希望我的Ņavbar的背景颜色是深红色。除了标准引导CSS之外,我还有自己的CSS,如下所示: 该网站是http://www.alkd.org.au 当悬停在每个导航栏项目上时,我得到了红色文本和白色背景的正确样式。但是标准navbar的背景颜色是黑色,而不是深红色,即使我已经覆盖了. navbar-逆背景颜色。浏览器开发工具显示,我的css是'获胜'之一,但似乎被

  • 参考:如何在颜色状态列表资源中指定背景颜色? 我已经按照上面链接中流行的答案。 我有以下绘图; 我理解,它将始终遵循优先顺序,因此在当前顺序中,只有激活和停用可能被触发。然而,目前我没有得到任何结果 我的按钮; 按钮显示为白色,在我的材质主题中,这是色彩主属性 首先,我假设一个主题覆盖了整个应用程序,但如果你明确指定一个特定按钮的背景,它应该覆盖主题值,如果我错了,请纠正我。 我从res/colo

  • 下面是我的navbar.js null ]2]2 这里是我的navbar.css null null

  • 我正在尝试使用java swing创建一个tic-tac-toe游戏。我创建了一个框架,并将其背景设置为一种颜色。问题是框架的背景色没有改变,我尝试使用其他颜色,但背景色总是白色。以下是代码:

  • 我正在尝试制作背景全尺寸图像为每个幻灯片幻灯片在OpenCart。正如我所看到的,OpenCart使用Swiper来创建这个滑块。以下是我的的外观: 正如我所假设的,应该覆盖整个背景。但尽管如此,结果是: 看起来背景图像是试图适合在块只有顶部和底部的角。有什么我遗漏的吗?

  • 我正在用Java制作一个游戏,目前背景设置不起作用,但前景设置可以工作。以下是我的主类代码: 下面是我的Screen类的代码: