传递给另一个类时缺少值 - Android - Java?

时间:2015-10-13 08:07:22

标签: java android

我将值传递给另一个类,我在另一个类中获取值,但是当我使用该值时,它会显示0

public class MaterialSpinner extends Spinner implements ValueAnimator.AnimatorUpdateListener {

    public int widths;

    public MaterialSpinner(Context context, int width) {
        super(context);
        this.widths = width;
        // **HERE SHOW ME VALUE FOR EXAMPLE 596**
        Log.i("LOG-1", String.valueOf(widths));
        init(context, null);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        //BUT HERE GET ME 0**
        int startX = this.widths;
        Log.i("LOG-2", String.valueOf(widths));
     }
}

我有其他构造函数:

public MaterialSpinner(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context, attrs);
}

public MaterialSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context, attrs);
}

这是我的活动;我将值从这里传递给MaterialSpinner类:

public class StartActivity extends AppCompatActivity {

    Context context;
    private ArrayAdapter<String> adapter;
    int width;
    int height;
    MaterialSpinner spinner1;

    private boolean shown = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
        context = this;
        if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
            Display display = getWindowManager().getDefaultDisplay();
            width = display.getWidth();
            height = display.getHeight();

        }
        else {
            Display display = getWindowManager().getDefaultDisplay();
            Point size = new Point();
            display.getSize(size);
            width = size.x;
            height = size.y;
        }
        new MaterialSpinner(context, width);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ITEMS);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        initSpinnerHintAndFloatingLabel();
    }

    private void initSpinnerHintAndFloatingLabel() {
        spinner1 = (MaterialSpinner) findViewById(R.id.spinner1);
        spinner1.setAdapter(adapter);
        spinner1.setPaddingSafe(0, 0, 0, 0);
    }
}

1 个答案:

答案 0 :(得分:2)

你正在创建一个对象,你什么都不做:

new MaterialSpinner(context,width);

在另一个功能中你这样做:

spinner1 = (MaterialSpinner) findViewById(R.id.spinner1);

这将使activity_start布局中的对象膨胀。简单的方法是创建一个setWidth()函数,并在夸大View之后调用它

spinner1 = (MaterialSpinner) findViewById(R.id.spinner1);
spinner1.setWidth(width);

编辑:并删除new MaterialSpinner(context,width);,因为它什么都不做