0

私のアプリは、から選択したアイテムに詳細を提供するためにActivity2つを使用するを開始します。FragmentsList

起動時に、アプリは外部ストレージ上のDBを読み取ります。SQLiteさらに、外部ストレージ上のxmlファイルからデータを収集します。

それはすべて素晴らしくスムーズに機能します:)

しかし、抽象クラスを使用してコードを詳細に再利用しているためFragments、アプリは奇妙な動作を開始します。詳細が開いているか非表示になっているときにデバイスをUSBから接続または切断すると、アプリがクラッシュします。Fragment

「申し訳ありませんが、アプリケーションxyzが予期せず停止しました。...もう一度やり直してください。」

細部につながっていると思いますFragments。デバイスのプラグを抜くとデバッガーやロギングが機能しないため、確かにわかりません:D
しかし、他のすべての機能は正常に機能します。

デバイスのプラグを抜くと、アプリはどうなりますか?多分私はそこに介入することができます...

AbstractDetailFragment

public AbstractWISDetailFragment(ChooseData cData) {
        this.data = cData;
    }

@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        setDetail();
        view.setClickable(true);
    }

protected abstract void setDetail();


ImplFragment

public ActorDetailFragment(ChooseData data) {
    super(data);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.akteur_detail, container, false);
    return view;
}
@Override
protected void setDetail() {
    // something
    ...
}


編集:

リストアイテムをタッチして詳細フラグメントをインスタンス化した瞬間からのlogcatエントリは次のとおりです。

I/InputReader(  305): dispatchTouch::touch event's action is 0, pending(waiting
finished signal)=0
I/InputDispatcher(  305): Delivering touch to current input target: action: 0, c
hannel '41a8fc30 ...ChooseActivity (server)'
I/InputDispatcher(  305): Delivering touch to current input target: action: 0, c
hannel 'TouchIntercepter (server)'
I/InputReader(  305): dispatchTouch::touch event's action is 1, pending(waiting
finished signal)=0
I/InputDispatcher(  305): Delivering touch to current input target: action: 1, c
hannel '41a8fc30 ...ChooseActivity (server)'
I/InputDispatcher(  305): Delivering touch to current input target: action: 1, c
hannel 'TouchIntercepter (server)'
D/WIS_ActorList( 2686): new actor item data set (process reseted)
D/WIS_ChooseActivity( 2686): ProcessButton enabled
D/WIS_ChooseActivity( 2686): ProcessStartButton disabled
D/WIS_ChooseActivity( 2686): ProcessStartButton disabled
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-3ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-3ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X
D/dalvikvm( 2305): GC_EXPLICIT freed 329K, 9% free 6875K/7495K, paused 7ms+2ms
W/PowerManagerService(  305): Timer 0x3->0x3|0x1
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-4ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-4ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-4ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X

デバイスのプラグを抜くと、logcatは自殺します。

4

1 に答える 1

0

明らかに、デバイスのプラグを抜くと、アクティブなアクティビティが復元されます。私の場合のように、setArgumentを使用せず、バンドルをフラグメントに配信しないと、問題が発生します。
したがって、フラグメントが自分自身を再初期化できず、そのデータオブジェクトがコンストラクターを介して渡されたため、ヌルポインターに似たものがありました。
Eclipse から、非標準のコンストラクターを使用しないように言われました。このように、パラメーターを介した基本的なデータ オブジェクトの交換は機能しません。

解決策:
バンドルとデータを交換するだけです(それがその方法です):

Bundle extra = new Bundle();
extra.putSerializable("myData" this.data);
Fragment fragment = new fragment ();
fragment.setArguments(extra);

多田 - すべて正常に動作します。
すべての活動と意図でそれを心に留めておけば、トラブルに遭遇することはありません。

hf

于 2012-07-18T19:57:05.847 に答える