下面是我的代码,这关闭了应用程序,因为我在我的课程中设置了图像。这有什么不妥?更轻松地加载图像?
public static class FiveSkills extends Activity{
ImageView img = (ImageView) findViewById(R.id.img);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image);
img.setImageResource(R.drawable.five_skills);
}
}
XML布局
<?xml version="1.0" encoding="utf-8"?>
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="59dp"
/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="15dp"
android:text="Five Skills"
android:textColor="#08088A"
android:textAppearance="?android:attr/textAppearanceLarge" />
答案 0 :(得分:3)
这里的问题是,当你使用方法findViewById(R.id.img)时,你的视图可能甚至还没有膨胀,为了使代码工作,在setContentView之后获取图像的参考叫,像这样:
ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image);
img = (ImageView) findViewById(R.id.img);
img.setImageResource(R.drawable.five_skills);
}
跳这有帮助。
问候!
答案 1 :(得分:1)
获取子视图的最佳方法是一旦父进程膨胀。这是你获得"ANR"
的唯一原因。
似乎你把Java抓取变量的概念混淆在类旁边并使其成为全局变量。完全正确,这是我们总是这样做的。但是从XML Layout
文件中获取视图时。您需要在Activity
下的onCreate()
开头对其进行充气。看看你工作的事物的生命周期总是更好。所以请去Life Cycle of Activity
仅供参考。
您的代码看起来像这样:
public static class FiveSkills extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.image);
ImageView img = (ImageView) findViewById(R.id.img); // Inflate child view once your parentview is available.
img.setImageResource(R.drawable.five_skills);
}
}
获得将在Activity
中使用的布局文件。之后,您就可以下拉布局子视图了。