我想在活动和片段以及片段和片段之间传递一个复杂的对象.目前,主活动创建一个片段输入对象,并将其设置为需要打开的片段的成员.类似地,当另一个片段想要加载另一个片段时,它会创建片段输入并通知主要活动.请参阅下面的主要和子片段代码.我的问题是,这是正确的实施.有时我在子活动中遇到输入为null,如果活动暂停并重新启动.
请告诉我我做错了什么,是传递数据的最佳方式.
public class FragmentInput {
public String url = "";
public String title = "";
public String time = "";
... other memebers
}
Run Code Online (Sandbox Code Playgroud)
主要活动
fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
BaseFragment fragment = new LandingFragment();
**FragmentInput input = new FragmentInput();
input.stringinput = stringinput;
fragment.input = input;
fragmentTransaction.replace(R.id.fragment, fragment);
fragmentTransaction.commit();**
public void replaceFragment(BaseFragment fragment) {
if (fragment == null)
return;
if (fragment instanceof firstFragment) {
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.setCustomAnimations(0, 0);
fragmentManager.popBackStackImmediate(null,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
} …Run Code Online (Sandbox Code Playgroud) 我有侧边栏导航抽屉布局的Android应用程序,我正在实现一个简单的短信应用程序的功能.
我的问题是,如何在活动之间重用导航抽屉代码.每个示例都使用在单击导航抽屉菜单中的项目后在某些主视图中显示的片段.如果我发布新活动并希望拥有与原始活动相同的侧边菜单,该怎么办?
谷歌是否有官方建议如何实施?
对我来说问题是,为了成为Android上的默认短信应用,你必须有一些处理某些意图的特殊活动.
我应该完全转储活动并使用碎片实现一切吗?
谢谢
android android-layout android-fragments android-activity navigation-drawer
我正在尝试将新的权限模型实现到我的应用程序中.我面临一个奇怪的问题.当我和我的代码的片段请求,那么该片段的onRequestPermissionResult不叫,而不是只有父活动的onRequestPermissionResult被称为具有相同请求代码.这导致了异常行为.我正在使用v4supportFragment.我的最小api是14,最大是23.
注意:这不是嵌套片段.此外,我已经浏览了stackoverflow的这篇文章,但它没有那么有用.
android android-fragments android-fragmentactivity android-permissions runtime-permissions
所以我有一个调用DialogFragment的片段(WifiSetupFragment),而DialogFragment需要将字符串传递回原始片段.我知道要做到这一点,你在活动中有一个接口,将数据发送到原始片段,我已经在做了:
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.content_frag, WifiSetupFragment.newInstance(password));
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
所以我第一次调用WifiSetupFragment时,我还没有创建一个DialogFragment,因为我没有点击一个项目来打开对话框.我的问题是我应该打电话
WifiSetupFragment.newInstance(null)
Run Code Online (Sandbox Code Playgroud)
并对我的片段中的密码字符串进行空检查?因为除非DialogFragment打开,否则我没有密码,并且它并不总是打开.如果这没有意义,请告诉我,我会尝试更清楚地解释.我想这对我来说似乎很奇怪,因为数据不是经常被传入,所以偶尔会有一个字符串的参数可能只被发送到这个片段.
我已经尝试了关于Android片段的第一个谷歌页面的每个教程,但我无法得到任何工作.
所以我有一个导航栏活动MainActivity.现在,我想在抽屉中点击更改片段.
在我的content_main(MainActivity活动中的默认片段)中,我有一个framelayout,我希望将片段放入.我有以下片段:fragment_main,fragment_one和fragment_two.我希望在点击导航抽屉中的按钮时显示这些内容.
我想使用碎片的原因是导航抽屉将保持在顶部.
提前致谢!
编辑:这是我将用于更改片段的函数:
它只是测试,而不是完成.
public void setFragment() {
android.support.v4.app.FragmentTransaction transaction;
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, new LoginFragment());
transaction.commit();
}
Run Code Online (Sandbox Code Playgroud) 我构建会提到,支持多种设备尺寸的应用在这里.
为了处理意见里面的Fragment一个可能要么做查找与findViewById在活动的onCreate()或片段的onViewCreated().
他们都会工作,因为:如果你从Activity你那里做到这一点,你将处理Fragment父母的,你的View意志仍然在其中,如果你从中做到Fragment这将有正常的findViewById行为.
所以...
他们都有自己的优势:
如果你这样做Activity:
如果你这样做Fragment:
有这个问题的方式.在他们讨论有关使用getView或getActivity调用findViewById的Fragment.
接受的答案是:
而不是使用getActivity().findViewById(),你需要getView().findViewById().这样做的原因是,如果您使用活动进行视图查找,那么当具有相同视图ID的多个片段附加到该视图时,您将遇到麻烦
但是,如果你永远不会Fragment在相同的布局中重复使用,那么在查找中这是一个很好的情况Activity吗?
示例布局:
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<fragment
android:id="@+id/f_main"
class=".fragments.MainFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_main" /> …Run Code Online (Sandbox Code Playgroud) 我有三个选项卡,当用户转到第三个选项卡然后返回第一个选项卡时 - 第一个选项卡中的内容不会重置,表单会不断重新加载.
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.scorespagemain);
viewPager = (ViewPager) findViewById(R.id.viewPager);
CAdapter cAdapter = new Adapter(getSupportFragmentManager(), ScoresPageMain.this);
viewPager.setAdapter(cAdapter);
tabLayout = (TabLayout) findViewById(R.id.tabsstuff);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
});
}
Run Code Online (Sandbox Code Playgroud)
}
CAdapter 类:
public class CAdapter extends FragmentPagerAdapter{
String names[] = new String[] {"Top Teams", "Top Scores", "Top Players"};
Context context;
public CAdapter(FragmentManager …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager android-tablayout
我在Android Studio中创建了一个示例选项卡式活动,现在我想在其中显示一些我自己的片段,而不是默认的占位符文本.
在其他项目中,我将创建一个空白片段,并使用以下代码添加它:
BlankFragment1 blankFragment1 = new BlankFragment1();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, blankFragment1).commit();
Run Code Online (Sandbox Code Playgroud)
如果我导入空白片段类和xml布局并简单地在PlaceholderFragment类中粘贴这两行,我得到
Non-Static method cannot be referenced from a static context
Run Code Online (Sandbox Code Playgroud)
所以,我尝试创建一个PlaceholderFragment实例并调用getSupportFragmentManager()它:
PlaceholderFragment placeholderFragment = new PlaceholderFragment();
placeholderFragment.getSupportFragmentManager().beginTransaction().add(R.id.container, blankFragment1).commit();
Run Code Online (Sandbox Code Playgroud)
但现在我明白了
Cannot resolve method 'getSupportFragmentManager()'
Run Code Online (Sandbox Code Playgroud)
所以我认为可能有更好更简单的方法来做这件事.
在选项卡式活动中使用某些现有片段的最佳方法是什么?
作为参考,这是整个MainActivity类:
public class MainActivity extends FragmentActivity implements BlankFragment1.OnFragmentInteractionListener {
/**
* The {@link android.support.v4.view.PagerAdapter} that will provide
* fragments for each of the sections. We use a
* {@link FragmentPagerAdapter} derivative, which will keep every
* loaded fragment in memory. If this becomes …Run Code Online (Sandbox Code Playgroud) 我的一些活动由3个垂直布局的片段组成(顶部,中间和底部)
中间片段是包装在滚动视图中的唯一片段。顶部和底部片段是静态的。底部片段具有用于用户输入的编辑文本控件。从上到下的片段权重分别为.1,.6和.3
当出现软键盘以供用户输入时,软键盘将覆盖用户需要在其中输入文本的编辑文本字段。似乎碎片向上移动,但不够用,底部碎片的一半被键盘覆盖了。我使用了多个带有windowSoftInputMode属性的开关,但似乎没有一个起作用。
windowSoftInputMode =“ adjustResize | stateHidden” windowSoftInputMode =“ adjustPan”
显示软键盘时,如何保证至少底部片段是完全可见的?我需要做什么?
android android-softkeyboard android-fragments android-layout-weight
android ×10