我是 Android 编程新手,但对 Java 有一些经验,尽管还很缺乏经验。
我将首先发布 XML 文档,以便更容易描述。
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_weight="2"
android:background="#4E2FEB">
</LinearLayout>
<HorizontalScrollView
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="#E01F39" >
<LinearLayout android:id="@+id/card_tray"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal" >
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
我想在 java 代码中将 ImageView 添加到 HorizontalScrollView 中。这是我到目前为止得到的代码。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout l = (LinearLayout)findViewById(R.id.card_tray);
l.addView((ImageView)findViewById(R.id.xo_1));
l.addView((ImageView)findViewById(R.id.xo_2));
}
这是我拥有的另一个 .xml 文件,其中包含我要引用的 ImageView 视图。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView android:id="@+id/xo_1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:adjustViewBounds="true"
android:paddingRight="10dp"
android:src="@drawable/xo_1" />
<ImageView android:id="@+id/xo_2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:adjustViewBounds="true"
android:paddingRight="10dp"
android:src="@drawable/xo_2" />
</LinearLayout>
当我尝试使用 Eclipse 在我的平板电脑上运行它时,它会因通常的“应用程序没有响应”消息而崩溃。
编辑: 这是 LogCat 输出。
03-30 01:38:13.053: D/AndroidRuntime(29659): 关闭 VM 03-30 01:38:13.053: W/dalvikvm(29659): threadid=1: 线程退出未捕获异常 (group=0x41f0b2a0) 03 -30 01:38:13.053:E/AndroidRuntime(29659):致命异常:主要 03-30 01:38:13.053:E/AndroidRuntime(29659):java.lang.RuntimeException:无法启动活动 ComponentInfo{kpapps.testapp /kpapps.testapp.MainActivity}:java.lang.NullPointerException 03-30 01:38:13.053:E/AndroidRuntime(29659):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 03-30 01:38 :13.053: E/AndroidRuntime(29659): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 03-30 01:38:13.053: E/AndroidRuntime(29659): 在 android.app.ActivityThread.access$700 (ActivityThread.java:140) 03-30 01:38:13.053: E/AndroidRuntime(29659):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 03-30 01:38:13.053: E/AndroidRuntime(29659): 在 android.os.Handler.dispatchMessage(Handler.java:99) 03- 30 01:38:13.053: E/AndroidRuntime(29659): 在 android.os.Looper.loop(Looper.java:137) 03-30 01:38:13.053: E/AndroidRuntime(29659): 在 android.app。 ActivityThread.main(ActivityThread.java:4921) 03-30 01:38:13.053: E/AndroidRuntime(29659): 在 java.lang.reflect.Method.invokeNative(Native Method) 03-30 01:38:13.053: E /AndroidRuntime(29659): at java.lang.reflect.Method.invoke(Method.java:511) 03-30 01:38:13.053: E/AndroidRuntime(29659): at com.android.internal.os.ZygoteInit$ MethodAndArgsCaller.run(ZygoteInit.java:1038) 03-30 01:38:13.053: E/AndroidRuntime(29659): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 03-30 01:38:13.053:E/AndroidRuntime(29659):在 dalvik.system.NativeStart.main(本机方法)03-30 01:38:13.053:E/AndroidRuntime(29659):引起:java.lang.NullPointerException 03-30 01:38:13.053: E/AndroidRuntime(29659): 在 android.view.ViewGroup.addView(ViewGroup.java:3481) 03-30 01:38:13.053: E/AndroidRuntime(29659): 在 android.view.ViewGroup .addView(ViewGroup.java:3464) 03-30 01:38:13.053: E/AndroidRuntime(29659): 在 kpapps.testapp.MainActivity.onCreate(MainActivity.java:22) 03-30 01:38:13.053: E /AndroidRuntime(29659): 在 android.app.Activity.performCreate(Activity.java:5188) 03-30 01:38:13.053: E/AndroidRuntime(29659): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1094) 03-30 01:38:13.053: E/AndroidRuntime(29659): 在 android.app.ActivityThread。performLaunchActivity(ActivityThread.java:2074) 03-30 01:38:13.053: E/AndroidRuntime(29659): ... 11 更多
编辑:根据要求。MainActivity.java 的第 22 行
l.addView((ImageView)findViewById(R.id.xo_1));
编辑:
修订
我将java代码更改为;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout l = (LinearLayout)findViewById(R.id.card_tray);
View cards = getLayoutInflater().inflate(R.layout.skill_cards, null);
ImageView imageView = (ImageView)cards.findViewById(R.id.xo_1);
ImageView imageView2 = (ImageView)cards.findViewById(R.id.xo_2);
l.addView(imageView);
l.addView(imageView2);
}
但它仍然会崩溃,只是出现不同的错误。这是新的 LogCat;
03-30 02:10:31.833: E/AndroidRuntime(4978): 致命异常: main 03-30 02:10:31.833: E/AndroidRuntime(4978): java.lang.RuntimeException: 无法启动活动 ComponentInfo{kpapps. testapp/kpapps.testapp.MainActivity}:java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。03-30 02:10:31.833: E/AndroidRuntime(4978): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 03-30 02:10:31.833: E/AndroidRuntime(4978): 在 android. app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 03-30 02:10:31.833: E/AndroidRuntime(4978): 在 android.app.ActivityThread.access$700(ActivityThread.java:140) 03-30 02:10 :31.833: E/AndroidRuntime(4978): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java: main(Native Method) 03-30 02:10:31.833: E/AndroidRuntime(4978): Caused by: java.lang.IllegalStateException: 指定的子节点已经有父节点。您必须首先在孩子的父母上调用 removeView()。03-30 02:10:31.833: E/AndroidRuntime(4978): 在 android.view.ViewGroup.addViewInner(ViewGroup.java:3672) 03-30 02:10:31.833: E/AndroidRuntime(4978): 在 android. view.ViewGroup.addView(ViewGroup.java:3543) 03-30 02:10:31.833: E/AndroidRuntime(4978): 在 android.view.ViewGroup.addView(ViewGroup.java:3488) 03-30 02:10: 31.833: E/AndroidRuntime(4978): 在 android.view.ViewGroup.addView(ViewGroup.java:3464) 03-30 02:10:31.833: E/AndroidRuntime(4978): 在 kpapps.testapp.MainActivity.onCreate(MainActivity .java:24) 03-30 02:10:31.833: E/AndroidRuntime(4978): 在 android.app.Activity.performCreate(Activity.