如何在 Android 中设置有限的适配器列表

How to set limited adapter list in Android

在我的应用程序中,我使用 ArrayAdapter,我只想显示 6 项
我在 adapter 中写了下面的代码:

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

但是当转到页面并且如果项目大小为 0 时显示此错误:

FATAL EXCEPTION: main
                                                                   Process: com.app.test, PID: 7264
                                                                   java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
                                                                       at java.util.ArrayList.get(ArrayList.java:411)
                                                                       at com.app.test.Adapters.AuctionDetailBidListAdapter.getView(AuctionDetailBidListAdapter.java:46)
                                                                       at android.widget.AbsListView.obtainView(AbsListView.java:3170)
                                                                       at android.widget.ListView.makeAndAddView(ListView.java:2140)
                                                                       at android.widget.ListView.fillDown(ListView.java:762)
                                                                       at android.widget.ListView.fillFromTop(ListView.java:826)
                                                                       at android.widget.ListView.layoutChildren(ListView.java:1893)
                                                                       at android.widget.AbsListView.onLayout(AbsListView.java:2942)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1766)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1766)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                       at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                       at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
                                                                       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                       at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                       at com.android.internal.policy.DecorView.onLayout(DecorView.java:934)
                                                                       at android.view.View.layout(View.java:18878)
                                                                       at android.view.ViewGroup.layout(ViewGroup.java:5953)
01-02 15:37:05.687 7264-7264/com.app.test E/AndroidRuntime:     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2684)
                                                                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2400)
                                                                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1537)
                                                                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
                                                                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:959)
                                                                       at android.view.Choreographer.doCallbacks(Choreographer.java:734)
                                                                       at android.view.Choreographer.doFrame(Choreographer.java:670)
                                                                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:945)
                                                                       at android.os.Handler.handleCallback(Handler.java:751)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                       at android.os.Looper.loop(Looper.java:154)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:6776)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

我该如何解决?

适配器代码:

public class AuctionDetailBidListAdapter extends BaseAdapter {

    private TextView edtUserName, time, price;
    private ImageView User, line1;

    public AuctionDetailBidListAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull ArrayList<Bid> objects) {
        super(context, resource, objects);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View v = View.inflate(context, layout, null);
        Bid model = (Bid) datas.get(position);

        edtUserName = v.findViewById(R.id.edtUserName);
        line1 = v.findViewById(R.id.line1);
        time = v.findViewById(R.id.time);
        price = v.findViewById(R.id.price);
        edtUserName.setText(model.getName());
        time.setText(getDateCurrentTimeZone(model.getEnd()) + "");
        DecimalFormat df = new DecimalFormat(",###.##");
        price.setText(df.format(Integer.parseInt(model.getCurrentPrice())) + "تومان");
        User = v.findViewById(R.id.User);
        Glide.with(context)
                .load(Constants.SERVER + model.getAvatar())
                .placeholder(R.mipmap.ic_launcher)
                .signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
                .into(User);

        if (position == 0) {
            line1.setBackgroundColor(ContextCompat.getColor(context, R.color.winner_1));
        } else {
            line1.setBackgroundColor(ContextCompat.getColor(context, R.color.winner_2));
        }

        commonAction(v);
        return v;
    }

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

您的数组中有零个项目 java.lang.IndexOutOfBoundsException: Index: 0,Size: 0, 构建一个只有 6 个项目的数组。

如果你能写下更多关于你的代码的细节

更新:

首先,您应该将 datas 列表声明为成员变量:

private ArrayList<Bid> datas = null;

然后在构造函数中使用构造函数参数初始化您的 datas 数组,如下所示:

datas = objects;

然后在getCount方法中做如下:

public int getCount() {
    return datas.size() <= 6 ? datas.size : 6;
}

即:如果数组列表的大小小于或等于 6,它将 return 大小,否则始终为 6。试试这个

当您的 ArrayList objects(或数据少于 6 个成员)或数据 IndexOutOfBound 中没有元素时,将发生异常

试试这个

@Override
public int getCount() {
    if(objects.size() < 6){
        return objects.size();
    }
    else{
        return 6;
    }
}

更新

声明:

private ArrayList<Bid> objects = null;

在构造函数中

this.objects = objects