アクティビティの別のインスタンスを別のインスタンス上に開くことは、コンテンツグラフをナビゲートする最も簡単な方法です。ユーザは、単にアクティビティを開始するまで、前に開いたコンテンツに戻ることができ、その後、アプリケーションは終了する。かなりまっすぐ進むが、この特定のアプローチは、2つの問題があります。
メモリのようなデバイスの大量のリソースを活用し、同じアクティビティのインスタンスの多くは、スタック上にあることを起こるかもしれません。
アクティビティスタックを細かく制御することはできません。あなたが唯一の別のアプローチがあります
など
FLAG_CLEAR_TOP
ように意図フラグに頼ら、より多くの活動を開始し、一部を終了、または持つことができ、その同じアクティビティインスタンスを再使用しても思い出しながら、その中に新しいコンテンツをロードしますロードされたコンテンツの履歴WebブラウザのようにWebページのURLを使用しています。
これまでのところ、コンテンツはStack
のままにしておくことをお勧めします。新しいコンテンツを読み込むと、より多くのデータがスタックにプッシュされ、空に戻るまでスタックからスタックの最上位のコンテンツがポップされます。アクティビティUIには、常にスタックの上からコンテンツが表示されます。
ラフ例:
public class PostActivity extends AppCompatActivity {
// keep history of viewed posts, with current post at top
private final Stack<Post> navStack = new Stack<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get starting link from intent extras and call loadPost(link)
}
private void loadPost(String link){
// Load post data in background and then call onPostLoaded(post)
// this is also called when user clicks on a related post link
}
private void onPostLoaded(Post post){
// add new post to stack
navStack.push(post);
// refresh UI
updateDisplay();
}
private void updateDisplay(){
// take the top Post, without removing it from stack
final Post post = navStack.peek();
// Display this post data in UI
}
@Override
public void onBackPressed() {
// pop the top item
navStack.pop();
if(navStack.isEmpty()) {
// no more items in history, should finish
super.onBackPressed();
}else {
// refresh UI with the item that is now on top of stack
updateDisplay();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// cancel any background post load, release resources
}
}
私はあなただったら私は断片を使用します。通常は詳細ページがアプリケーションの別の部分で繰り返されるため、コードの再利用性が向上します。 – Amir
@Amir Yep!私が今考えていることは、 'PostFragment'を保持する' PostActivity'というアクティビティを作成してから、アクティビティのフラグメント置き換えを行うためのインターフェースを作成することです。それについてどう思いますか? – MAY3AM
それは良い方法です。しかし、なぜ私はあなたがインターフェイスが必要なのか分からないのですか? – Amir