不能把我的代码放在oncreate函数中

时间:2016-02-19 20:45:12

标签: android android-layout android-studio

我有一个imageview应该在屏幕的左边,当我点击它时,它会到达屏幕的中心 当我将代码放入 OnCreate 功能时,该应用程序无效。

public class MainActivity extends AppCompatActivity {
public void fadeFunction  (View view){
    ImageView patrick = (ImageView)findViewById(R.id.patrick);
    patrick.animate().translationXBy(1500f).setDuration(2000);

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    ImageView patrick = (ImageView)findViewById(R.id.patrick);//my code here
    patrick.setTranslationX(-1500f);//my code here
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
}

3 个答案:

答案 0 :(得分:2)

setContentView()告诉您的Activity获取布局XML文件并实例化那里定义的视图。

如果您在此之前尝试访问自己的观看次数(例如,使用ImageView patrick = (ImageView)findViewById(R.id.patrick);),您会发现您的观看次数尚不存在。

将您的代码移至setContentView()以下,将解决该特定问题。

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ImageView patrick = (ImageView)findViewById(R.id.patrick);//my code here
patrick.setTranslationX(-1500f);//my code here

答案 1 :(得分:2)

setContentView(R.layout.activity_main)之后将以下两行向下移动到某处

ImageView patrick = (ImageView)findViewById(R.id.patrick);//my code here
patrick.setTranslationX(-1500f);//my code here

结果应该是这样的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView patrick = (ImageView)findViewById(R.id.patrick);//my code here
    patrick.setTranslationX(-1500f);//my code here
    // ... other code code goes here
}

这样做的原因是你无法在之前执行视图查找你已经定义了布局来查找它。好吧,从语法上来说你可以,但它总会返回{{1 }};

答案 2 :(得分:1)

setContentView()的调用后,您必须致电 findViewById() 。因此,请对您的代码进行以下更改。

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView patrick = (ImageView)findViewById(R.id.patrick);//my code here
    patrick.setTranslationX(-1500f);//my code here
}