0

問題がどこにあるかを理解できるように、レイアウト構造全体を提示する必要があると思います。私は Android プログラミングに慣れていないので、自分のしていることは正しいとは言えません。リストビューでロードされたmain.xmlがあります。次に、メニューがあり、メニューを押すと、add.xml をロードして新しいリストをリストビューに追加します。以下のとおりで、正常に動作しています。

final View addView = getLayoutInflater().inflate(R.layout.add, null);

    new AlertDialog.Builder(this).setTitle("New Tracker").setView(addView)
            .setPositiveButton("ADD", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    addWord((TextView) addView.findViewById(R.id.IDeditText));
                }
            }).setNegativeButton("Cancel", null).show();

add.xmlには EditText ビューがあります。ユーザーが EditText をタップすると、description.xml という別の XML レイアウトをロードしたいと思います。それは次のように行われます -

private void add() {
    final View addView = getLayoutInflater().inflate(R.layout.add, null);

    EditText DescEditTxt = (EditText) addView.findViewById(R.id.descriptionEdit);
    if(DescEditTxt != null)
    {
        DescEditTxt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                final View descriptionView = getLayoutInflater().inflate(R.layout.description, null);
                setContentView(descriptionView);        

            }
       });
    }


    new AlertDialog.Builder(this).setTitle("New Tracker").setView(addView)
            .setPositiveButton("ADD", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    addWord((TextView) addView.findViewById(R.id.IDeditText));
                }
            }).setNegativeButton("Cancel", null).show();
}

ユーザーが EditText ビューにフォーカスしているときに、description.xmlをロードしようとしましたが、プログラムがクラッシュしましたsetContentView(descriptionView);

私のクエリは

  • それは私がしていることに意味がありますか?そして、これに対するより良いアプローチはありますか?

  • プログラムがクラッシュした原因は何ですか?

ログキャット

03-17 06:15:24.918: E/InputEventReceiver(2093): Exception dispatching input event.
03-17 06:15:24.928: E/MessageQueue-JNI(2093): Exception in MessageQueue callback: handleReceiveCallback
03-17 06:15:25.048: E/MessageQueue-JNI(2093): java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.app.ListActivity.onContentChanged(ListActivity.java:243)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:292)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:279)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.app.Activity.setContentView(Activity.java:1901)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at sg.SanThit.TrackMe.MainActivity$1.onFocusChange(MainActivity.java:117)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.View.onFocusChanged(View.java:4587)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.widget.TextView.onFocusChanged(TextView.java:7325)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.View.handleFocusGainInternal(View.java:4375)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.View.requestFocusNoSearch(View.java:6660)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.View.requestFocus(View.java:6639)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.View.requestFocus(View.java:6606)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.View.requestFocus(View.java:6585)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.View.onTouchEvent(View.java:8184)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.widget.TextView.onTouchEvent(TextView.java:7377)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.View.dispatchTouchEvent(View.java:7239)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.app.Dialog.dispatchTouchEvent(Dialog.java:740)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.View.dispatchPointerEvent(View.java:7419)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.os.MessageQueue.nativePollOnce(Native Method)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.os.MessageQueue.next(MessageQueue.java:125)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.os.Looper.loop(Looper.java:124)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at android.app.ActivityThread.main(ActivityThread.java:5039)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at java.lang.reflect.Method.invokeNative(Native Method)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at java.lang.reflect.Method.invoke(Method.java:511)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-17 06:15:25.048: E/MessageQueue-JNI(2093):   at dalvik.system.NativeStart.main(Native Method)
03-17 06:15:25.048: D/AndroidRuntime(2093): Shutting down VM
03-17 06:15:25.062: W/dalvikvm(2093): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
03-17 06:15:25.168: E/AndroidRuntime(2093): FATAL EXCEPTION: main
03-17 06:15:25.168: E/AndroidRuntime(2093): java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.app.ListActivity.onContentChanged(ListActivity.java:243)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:292)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:279)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.app.Activity.setContentView(Activity.java:1901)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at sg.SanThit.TrackMe.MainActivity$1.onFocusChange(MainActivity.java:117)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.View.onFocusChanged(View.java:4587)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.widget.TextView.onFocusChanged(TextView.java:7325)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.View.handleFocusGainInternal(View.java:4375)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.View.requestFocusNoSearch(View.java:6660)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.View.requestFocus(View.java:6639)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.View.requestFocus(View.java:6606)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.View.requestFocus(View.java:6585)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.View.onTouchEvent(View.java:8184)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.widget.TextView.onTouchEvent(TextView.java:7377)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.View.dispatchTouchEvent(View.java:7239)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.app.Dialog.dispatchTouchEvent(Dialog.java:740)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.View.dispatchPointerEvent(View.java:7419)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.os.MessageQueue.nativePollOnce(Native Method)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.os.MessageQueue.next(MessageQueue.java:125)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.os.Looper.loop(Looper.java:124)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at android.app.ActivityThread.main(ActivityThread.java:5039)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at java.lang.reflect.Method.invokeNative(Native Method)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at java.lang.reflect.Method.invoke(Method.java:511)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-17 06:15:25.168: E/AndroidRuntime(2093):     at dalvik.system.NativeStart.main(Native Method)
03-17 06:20:25.548: I/Process(2093): Sending signal. PID: 2093 SIG: 9
4

1 に答える 1

0

(1)それは私がやっていることで意味がありますか?これに対するより良いアプローチはありますか?

私の意見では、あなたの問題の一部は、あなたが膨らませて使用しようとしているLayouts. 膨張Viewsは問題ありませんが、使用しようとしているものが多すぎるようです (これまでのところ 3 つ)。必要に応じてリストを呼び出しsetContentView()た場合は、はるかにシンプルでクリーンになります。これらすべてを 1 つにまとめ、API 11 以降を使用している場合は、フラグメントの使用を検討してください。onCreate()inflateViewActivity

あなたが持っているものを正確に想像するのは難しいですが、それぞれlayoutに多くのものがViews入っていない場合は、それらを1つに入れて必要になるまでlayout設定visibilityしてから変更する方が簡単かもしれませんgoneviewvisible

What could be the problem due to which the program crashed?

編集

エラーは、がありますが、XML に適切な ID をListActivity持つ がないためです。ListView次のようなものが必要です

<ListView
android:id="@android:id/list"
.../>

独自のものを拡張Activityして作成するだけの場合listview、これは必要ありません。ただし、拡張する場合は、xml でListActivityこれが必要です。ListViewlogcat の次の行は、これを知る方法です。

java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
于 2013-03-17T06:05:55.347 に答える