java - 索引越界异常

标签 java android oop spinner

我正在尝试为 android 微调器实现自定义微调器样式。当我在微调器中选择一个项目时出现问题,它没有显示在微调器(所选项目)上。我的代码中有几个问题。 这里是日志猫

01-06 08:21:38.254: E/AndroidRuntime(733): FATAL EXCEPTION: main
01-06 08:21:38.254: E/AndroidRuntime(733): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
01-06 08:21:38.254: E/AndroidRuntime(733):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
01-06 08:21:38.254: E/AndroidRuntime(733):  at java.util.ArrayList.get(ArrayList.java:304)
01-06 08:21:38.254: E/AndroidRuntime(733):  at com.xx.x.Page5SubActivity$MyAdapter.getCustomView(Page5SubActivity.java:487)
01-06 08:21:38.254: E/AndroidRuntime(733):  at com.xx.x.Page5SubActivity$MyAdapter.getView(Page5SubActivity.java:479)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.Spinner.onMeasure(Spinner.java:285)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.View.measure(View.java:12723)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.View.measure(View.java:12723)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.View.measure(View.java:12723)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.View.measure(View.java:12723)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.View.measure(View.java:12723)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-06 08:21:38.254: E/AndroidRuntime(733):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.View.measure(View.java:12723)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.os.Looper.loop(Looper.java:137)
01-06 08:21:38.254: E/AndroidRuntime(733):  at android.app.ActivityThread.main(ActivityThread.java:4424)
01-06 08:21:38.254: E/AndroidRuntime(733):  at java.lang.reflect.Method.invokeNative(Native Method)
01-06 08:21:38.254: E/AndroidRuntime(733):  at java.lang.reflect.Method.invoke(Method.java:511)
01-06 08:21:38.254: E/AndroidRuntime(733):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-06 08:21:38.254: E/AndroidRuntime(733):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-06 08:21:38.254: E/AndroidRuntime(733):  at dalvik.system.NativeStart.main(Native Method)

这是我用来自定义微调器的类

public class MyAdapter extends ArrayAdapter<String>
    {
      private List<String> listString = new ArrayList<String>();

      public MyAdapter(Context context, int textViewResourceId, List<String> objects) {
        super(context, textViewResourceId, objects);

      //listString  = objects;
      }

      @Override
      public View getDropDownView(int position, View convertView,ViewGroup parent) {
            return getCustomView(position, convertView, parent);
      }

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
            return getCustomView(position, convertView, parent);
      }

      public View getCustomView(int position, View convertView, ViewGroup parent) {

       LayoutInflater inflater=getLayoutInflater();
       View row=inflater.inflate(R.layout.spinner, parent, false);
       TextView label=(TextView)row.findViewById(R.id.textView1);
       label.setText(listString.get(position)); 

       return row;

      }
    }

当我评论这一行 //listString = objects; 时出现以上错误 我评论它是因为它已经用 super 方法初始化了。 super(context, textViewResourceId, objects); 谁能给我解释一下?在 OOP 中,我们使用 super 来初始化具有父类(super class)值的内容。那么为什么我需要重新初始化它呢?或者我们不能对 2 个参数使用 super 方法并在上面的类中初始化 //listString = objects; 吗?我知道我缺乏 OOP。谁能给我解释一下?

第二个问题是当我删除评论时它开始工作。但它没有显示我选择的项目。我已经写了关于项目选择的事件。他们工作。我还需要做什么才能完成这项工作?

最佳答案

listString 不能由父类(super class)初始化。它是 MyAdapter 类的成员,而不是父类(super class)。

private List<String> listString = new ArrayList<String>();

get 调用时 listString 仍然是空的,因此异常。

关于java - 索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14178881/

相关文章:

sql - 这是一个好的设计吗?

javascript - 在构造函数方法中将类的所有属性作为参数传递是否有意义?

java - 空指针异常 : fav_up_btn1 = null

java - 无法设置面板的背景颜色

java - 多态反序列化 jackson

python - 如何在 Python 中为自动创建的类对象分配名称

javascript - 在完全加载页面之前,加载栏隐藏在jsf中

java - Executors 工厂方法 newScheduledThreadPool 始终返回相同的线程池

android - 如何创建 ionic 应用程序更新按钮

android - 如何为 NDK 转换 C++ 代码?