Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置微调器布局上的选择_Android_Spinner - Fatal编程技术网

Android 设置微调器布局上的选择

Android 设置微调器布局上的选择,android,spinner,Android,Spinner,我有一个非常简单的布局,里面有一个微调器,它连接了我自己的适配器 MyAdapter myAdap = new MyAdapter(); mySpinner.setAdapter(myAdap); 适配器有来自调试器的两项: myAdap.getCount() = 2 当我将选择设置为1时,虽然0起作用 应用程序崩溃: 10-05 19:37:17.122 19899-19899/nl.example.demo E/test: Exception 10-05 19:37:17.142 198

我有一个非常简单的布局,里面有一个微调器,它连接了我自己的适配器

MyAdapter myAdap = new MyAdapter();
mySpinner.setAdapter(myAdap);
适配器有来自调试器的两项:

myAdap.getCount() = 2
当我将选择设置为1时,虽然0起作用

应用程序崩溃:

10-05 19:37:17.122 19899-19899/nl.example.demo E/test: Exception 10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime: FATAL EXCEPTION: main 
10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime: Process: example.demo, PID: 19899 10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime: java.lang.NullPointerException 
10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime:     at android.widget.TextView.makeNewLayout(TextView.java:6151) 
10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime:     at android.widget.TextView.onMeasure(TextView.java:6427) 
10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime:     at android.view.View.measure(View.java:16643)
[..]
奇怪的是,它可以在另一部同样版本的安卓手机上运行,但屏幕更小

MyAdapter如下所示:

public class MyAdapter extends ArrayAdapter<String> {
    static ArrayList<String> methods = null;
    private LayoutInflater mInflater;

    public MyAdapter(Context ctx) {
        super(ctx, 0);
        mInflater = LayoutInflater.from(ctx);
        if (methods == null) {
            methods = new ArrayList<String>();
            methods.add("1");
            methods.add("2");
            methods.add("3");
        }
    }

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

    @Override
    public String getItem(int position) {
        return methods.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(android.R.layout.simple_spinner_item, null);
        }
        TextView tvLabel = (TextView)convertView.findViewById(android.R.id.text1);
        tvLabel.setText("test");
        return convertView;
    }
}

更新我的Nexus 6没有问题。

我认为您应该这样修改代码:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(android.R.layout.simple_spinner_item, null);
TextView tvLabel = (TextView)convertView.findViewById(android.R.id.text1);

        }else{ 
        tvLabel.setText("test");
        return convertView;}
    }
as findViewById只应在convertview为null时调用。
此外,您还缺少return convertview标记

错误在您的TextView中,请共享您的MyAdapterclass@RahulParihar更新了我的问题你确定这是Java吗?@Onik,是的。什么让你怀疑?@Bart Friederichs有两件事:1为什么构造函数PickMethodAdapter与类名不匹配?2我可以看到getItem方法的返回类型是PickMethod,而实际的返回类型是String?…好吧,要么我在编码2,5年后对Java一窍不通,要么是你这边的复制粘贴错误…你如何解释它在另一个屏幕较小的手机上工作?注意,我编辑了我的答案,至于屏幕大小,它会影响get view的调用,我遇到了几乎相同的问题,然后意识到视图回收是某些textview变为null或被回收的原因。你也可以忘记回收视图,比如这里的自定义微调器适配器示例:我来看看。就我的理解而言,这不会导致在getView方法中而不是在ChoreoGrapher中抛出NullPointerException吗?
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(android.R.layout.simple_spinner_item, null);
TextView tvLabel = (TextView)convertView.findViewById(android.R.id.text1);

        }else{ 
        tvLabel.setText("test");
        return convertView;}
    }