0

これを正しい方法で行う方法がわかりません。マスター/詳細フローがあり、それを完了する必要がある詳細でアクションを実行しますが、もちろん、詳細フラグメントは、単一または二重ペイン アクティビティによってラップされているかどうかを認識しない必要があります。

では、これをどのように行うべきですか?両方のアクティビティが実装され、単一のペインがそれ自体を終了してフラグメントを終了し、デュアルペインがフラグメントをポップするコールバックについて考えていました。

これは良い考えですか?詳細フラグメントからのコールバックがありますか? これはオーバーヘッドではありませんか?

ありがとう

4

2 に答える 2

5

いいえ、オーバーヘッドではありません。それは正しい方法です。

またはあなたの中でこれを行いますDetailFragment

if (getActivity() instanseOf SinglePaneActivity){
    getActivity().finish(); 
}else{ 
    getActivity().getFragmentManager().popBackStack();
}
于 2013-02-21T15:53:00.130 に答える
2

今、私はそれを完了する必要がある詳細でアクションを実行します

これはマスター/ディテール パターンでは珍しいフローです。通常、詳細は、ユーザーがマスター リスト内の別のものをタップするまで保持されます。ただし、表示されているアイテムの削除操作の提案されたフローを見ることができました。

両方のアクティビティが実装され、単一のペインがそれ自体を終了してフラグメントを終了し、デュアルペインがフラグメントをポップするコールバックについて考えていました。

それは素晴らしい答えです。

これはオーバーヘッドではありませんか?

いいえ。フラグメントをホストするすべてのアクティビティが実装する必要があるインターフェイスを定義します。コントラクト パターンを使用して、次のことを強制することを検討してください。

import android.app.Activity;
import com.actionbarsherlock.app.SherlockFragment;

// from https://gist.github.com/2621173

public abstract class ContractFragment<T> extends SherlockFragment {
  private T mContract;

  @SuppressWarnings("unchecked")
  @Override
  public void onAttach(Activity activity) {
    try {
      mContract=(T)activity;
    }
    catch (ClassCastException e) {
      throw new IllegalStateException(activity.getClass()
                                              .getSimpleName()
          + " does not implement "
          + getClass().getSimpleName()
          + "'s contract interface.", e);
    }
    super.onAttach(activity);
  }

  @Override
  public void onDetach() {
    super.onDetach();
    mContract=null;
  }

  public final T getContract() {
    return mContract;
  }
}

( ActionBarSherlock で有名なJake Wharton の要点に基づくコード)

ここでTは、インターフェイスの名前です。フラグメントはこれから継承しgetContract()、コールバック メソッドを呼び出すインターフェイス実装オブジェクトを取得するために呼び出します。実行時のオーバーヘッドは、せいぜい数十命令程度です。心配する必要はありません。

于 2013-02-21T15:50:40.147 に答える