私は 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));
}
これは、私が参照しようとしている ImageView ビューを含む、私が持っている他の .xml ファイルです。
<?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(ネイティブ メソッド) 03-30 01:38:13.053: E /AndroidRuntime(29659): java.lang.reflect.Method.invoke(Method.java:511) 03-30 01:38:13.053: E/AndroidRuntime(29659): com.android.internal.os.ZygoteInit$ でMethodAndArgsCaller.run(ZygoteInit.java:1038) 03-30 01:38:13.053: E/AndroidRuntime(29659): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 03-30 01:38:13.053: E/AndroidRuntime(29659): dalvik.system.NativeStart.main(Native Method) 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): 致命的な例外: メイン 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): 原因: 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.