我有一个在活动中保存帖子信息的应用程序。在此活动中,相关帖子列在帖子底部。用户通过点击相关的帖子可以去张贴活动,并看到该帖子的信息和相关的帖子也。
正如您在图片中所看到的,我有Activity,持有职位的,以及相关的帖子。当用户单击post时,我将用户发送到Activity A,使用新的post id并使用新的数据填充活动。
但我认为这是不对的!
我应该用Fragment
而不是Activity
吗?
发布于 2016-06-21 21:07:08
在另一个活动之上打开活动的另一个实例是导航内容图的最简单方法。用户可以简单地按后退,然后转到以前打开的内容,直到用户回到开始活动为止,然后应用程序就会关闭。尽管非常直截了当,但这种特殊的方法有两个问题:
FLAG_CLEAR_TOP
等。还有另一种方法,即重新使用相同的活动实例,在其中加载新的内容,同时记住加载的内容的历史。就像网页浏览器对网页urls所做的一样。
这样做的目的是保持到目前为止浏览的内容的Stack
。加载新内容会将更多的数据推送到堆栈中,而返回则会弹出堆栈中的顶部内容,直到其为空。Activity总是显示堆栈顶部的内容。
粗略的例子:
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
}
}
发布于 2016-06-15 06:29:28
我会选择:
活动/片段取决于复杂性,因为:
发布于 2016-06-15 20:53:30
这是你可以尝试的。
创建一个PostActivity
,它是片段的外壳。在这个活动中,您可以使用FragmentTransaction
替换片段。
您的PostActivity
现在可以有一个PostFragment
,它可以担任职位和相关职位。现在,单击post,您可以将PostFragment
替换为PostDetailFragment
,将postID
作为一个包发送到新片段。PostDetailFragment
现在将根据id显示详细信息。
检查这里:碎片
https://stackoverflow.com/questions/37498103
复制