在Android API 11+中,Google发布了一个名为的新类Fragment
.
在视频中,谷歌建议尽可能(link1,link2),我们应该使用片段而不是活动,但他们没有解释确切原因.
片段的目的是什么?它们的一些可能的用途(除了一些可以通过简单的视图/布局轻松实现的UI示例)?
我的问题是片段:
奖金问题:
android android-layout android-fragments android-3.0-honeycomb android-activity
基本的"片段教程"模式是这样的:
Fragments
并且两者都存在于同一个中Activity
.Fragment
中的一个Activity
.Activity
的细节Fragment
.(例如Dianne Hackborn的Android 3.0 Fragments API和Fragments API指南)
在这两个设备上,功能都在Fragments
.(简单)
在平板电脑上,整个应用程序是1Activity
,在手机上,有很多Activities
.
Activities
?此方法的一个问题是,您复制了主平板电脑Activity
和单独电话中的大量逻辑Activities
.
Fragments
出逻辑(仅使用不同的布局),在两种情况下保留1活动模型会不会更容易?这种方式大部分逻辑都存在于Fragments
自身中,并且只有一个Activity
- 更少的代码重复.
我所读到的ActionBarSherlock
也是它似乎最好用Fragments
而不是Activities
(但我还没有使用它).
教程是否过于简化,或者我错过了这种方法的主要内容?
我们已经在办公室成功地尝试了这两种方法 - 但我即将开始一个更大的项目,并希望尽可能让自己变得容易.
一些相关问题的链接:
我经常需要我的应用程序的不同部分有自己的特殊行为和UI,我不知道片段可以如何帮助.在大多数情况下,我认为创建2个不同的活动(例如,1个用于平板电脑,1个用于手机)以及分享第三类中的常见行为和事件更快.
所以,记住这一点,我为什么要使用片段?
根据我的研究,背斜堆的概念及其存在方式存在显着差异:
当activity
被放置到backstack
的activities
用户可以通过仅按下导航回先前的活动back
按钮.
Activity
可以独立存在.
当a fragment
被放置到活动时,我们必须通过addToBackstack()
在调用期间请求保存实例fragment
transaction
.
Fragment
必须住在里面 activity
还有其他差异吗?
在为客户启动新应用程序时,我再次问自己应该负责加载数据的相同问题:活动或片段.我已经为各种应用程序采取了两种选择,我想知道哪种模式最适合您:
这允许具有仅被馈送一堆对象的片段来显示.他们对加载数据以及我们如何加载数据一无所知.
另一方面,活动使用任何需要的方法加载数据(例如,最初最近的50个条目和搜索,加载搜索结果).然后它将它传递给显示它的片段.加载数据的方法可以是任何东西(来自服务,来自DB,......片段只知道POJO)
它是一种MVC架构,其中活动是控制器,片段是视图.
在这种模式中,片段是应用程序的自主部分.他们知道如何加载他们正在显示的数据以及如何向用户显示数据.
活动只是一种在屏幕上排列片段并协调应用程序活动之间转换的方法.
我已经查看了其他问题,博客和文档,似乎无法找到满足我需求的正确答案.我有两个活动,A和B.当我启动活动B(来自A)时,我希望它立即打开,然后在显示进度条时加载所有内容,而不是仅在加载内容时打开活动,使其成为可能好像它冻结了两秒钟.例如Youtube应用程序或Play商店.
这就是我得到的:
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent goB = new intent(ActivityA.this, ActivityB.class);
startActivity(goB);
}
});
Run Code Online (Sandbox Code Playgroud)
这是我正在加载的活动:
public class ActivityB extends AppCompatActivity implements OnDateSelectedListener, OnMonthChangedListener {
private static final DateFormat FORMATTER = SimpleDateFormat.getDateInstance();
@Bind(R.id.calendarView) MaterialCalendarView widget;
@Bind(R.id.textView) TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_c_calendar);
ButterKnife.bind(this);
widget.setOnDateChangedListener(this);
widget.setOnMonthChangedListener(this);
textView.setText(getSelectedDatesString());
}
@Override
public void onDateSelected(@NonNull MaterialCalendarView widget, @Nullable CalendarDay date, boolean selected) {
textView.setText(getSelectedDatesString());
}
private String getSelectedDatesString() {
CalendarDay date = widget.getSelectedDate();
if (date …
Run Code Online (Sandbox Code Playgroud) 我正在构建一个Android应用程序,尽管它具有完全不同的功能,但它具有与Instagram非常相似的UI.有一个带有按钮的底栏,用于查看时间线,发布(我的应用内容),检查通知以及查看您自己的个人资料.
我是四年级电气工程专业的学生,但我对Android开发相对较新.为了更快地教自己更多的东西,我继续使用他们自己的底栏(它们只是按钮作为我的应用程序(如查看帖子,个人资料,时间轴,朋友等)他们自己的活动的很多功能.现在).在这样做的过程中,我学到了很多关于开发的知识,并构建了一个应用程序,就我迄今为止所构建的应用程序而言,它可以按照预期运行,但不是太快或太漂亮.我意识到这可能不是最佳实践,我想问你所有你认为如何实现类似Instagram的UI的简单解释?当我说Instagram时我主要是指:它包括一个底栏; 应用程序"保留"用户所在的位置,就像我正在从时间线查看朋友,然后按视图配置文件按钮,再按时间线,然后我仍然会查看我的朋友.
我试图尽可能多地阅读以解决重新设计问题,但我仍然对做这样的事情的标准有点模糊.我应该尝试TabHost(已弃用)吗?每个按钮应该代表一个具有可交换视图的活动(例如在IG中我点击我的时间轴上的帖子并且它交换到图片后视图)?我应该将活动与每个按钮相关联,并根据用户导航的位置交换片段吗?我意识到这是一个开放式问题,我希望它对Stack Overflow来说不是太模糊,但我已经考虑过很多了,我很感激一些更有经验的开发人员的反馈!谢谢!
我创建了一个带有底部导航栏的活动。我用谷歌搜索了很多关于它的东西,但现在我不知道如何准确处理这个问题。之前,当用户单击底部导航时,我刚刚开始另一个活动,但我认为这不好。
如何在选项卡之间切换?我必须使用片段吗?那么“setContentView(intlayoutResID)”呢?我怎样才能做到这一点?我很困惑...
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
return true;
case R.id.navigation_dashboard:
startActivity(dashboardActivity);
return true;
case R.id.navigation_notifications:
startActivity(dashboardActivity);
return true;
}
return false;
}
};
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助 - 我希望您明白我的意思。
我有一个大型的Android游戏,其中每个逻辑屏幕都有一个Activity.(启动画面,开始画面,关卡选择器,游戏画面和设置是不同的活动).现在一切都很好.
如果我重写所有内容以便只有一个活动且逻辑屏幕是碎片,它会减少RAM或CPU消耗吗?
我有一个布局Fragment
的创建过程中,显示有关产品,但遗憾的是资料,fragment
有一点滞后(毛刺)约50毫秒(这是我猜的滞后如何记录是这是一个很大的刷新率(Android版) 16毫秒),但是当我Activity
直接使用相同的布局并应用相同的逻辑时,它看起来和感觉都很平滑。
这种情况有什么特殊原因吗?有什么方法可以使片段在创建过程中看起来像活动一样平滑吗?
您可以测试一些复杂的布局,然后尝试将其作为片段的视图充气,并与活动的布局内容相同。
这是我的oncreate在片段和活动中的样子:
@Override
public void onCreate ( Bundle savedInstanceState ) { // or equivalent override for fragment.
super.onCreate ( savedInstanceState );
setContentView ( R.layout.fragment_product_profile );
initLayout ();
loadData ();
initCustomMadeImageSlider ();
autoScrollViewPager ();
}
Run Code Online (Sandbox Code Playgroud)
android android-layout android-fragments layout-inflater android-activity