标签: android-fragments

OnActivityResult 方法已弃用,有什么替代方法?

我最近发现 onActivityResult已被弃用。我们应该怎么处理呢?

为此引入了任何替代方案?

显示带有删除 onActivityResult 的代码的图像,表示已弃用

android android-fragments android-activity onactivityresult

192
推荐指数
11
解决办法
10万
查看次数

如何使用不同的片段/布局实现ViewPager

当我启动一个实现viewpager的活动时,viewpager创建了各种片段.我想为每个片段使用不同的布局,但问题是viewpager在最大值时只显示两个布局(在1之后的所有剩余片段上的第二个布局).

以下是实现viewpager的SwipeActivity的代码:

public class SwipeActivity extends FragmentActivity
{

    MyPageAdapter pageAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_swipe);
        pageAdapter = new MyPageAdapter(getSupportFragmentManager());
        ViewPager pager=(ViewPager)findViewById(R.id.pager);
        pager.setAdapter(pageAdapter);
        ActionBar bar = getActionBar();
        bar.setDisplayHomeAsUpEnabled(true);
    }
    /**
    * Custom Page adapter
    */
    private class MyPageAdapter extends FragmentPagerAdapter
    {
        public MyPageAdapter(FragmentManager fm)
        {
            super(fm);
        }
        @Override
        public int getCount()
        {
            return 5;
        }
        @Override
        public Fragment getItem(int position)
        {
            switch(position)
            {
                case 0: return new MyFragment();
                case 1: return SecondFragment.newInstance("asdasd");
                default : return RamFragment.newInstance("s"); …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-fragments android-viewpager fragmentpageradapter

188
推荐指数
3
解决办法
26万
查看次数

Android系统.片段getActivity()有时会返回null

在开发者控制台错误报告中,有时我会看到有NPE问题的报告.我不明白我的代码有什么问题.在模拟器上,我的设备应用程序在没有forcecloses的情况下运行良好,但是当调用getActivity()方法时,一些用户在片段类中获得NullPointerException.

活动

pulic class MyActivity extends FragmentActivity{

    private ViewPager pager; 
    private TitlePageIndicator indicator;
    private TabsAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        pager = (ViewPager) findViewById(R.id.pager);
        indicator = (TitlePageIndicator) findViewById(R.id.indicator);
        adapter = new TabsAdapter(getSupportFragmentManager(), false);

        adapter.addFragment(new FirstFragment());
        adapter.addFragment(new SecondFragment());
        indicator.notifyDataSetChanged();
        adapter.notifyDataSetChanged();

        // push first task
        FirstTask firstTask = new FirstTask(MyActivity.this);
        // set first fragment as listener
        firstTask.setTaskListener((TaskListener) adapter.getItem(0));
        firstTask.execute();
    }

    indicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener()  {
        @Override
        public void onPageSelected(int position) {
            Fragment currentFragment = adapter.getItem(position);
            ((Taskable) currentFragment).executeTask();
        }

        @Override
        public void onPageScrolled(int …
Run Code Online (Sandbox Code Playgroud)

android nullpointerexception android-asynctask android-fragments android-activity

187
推荐指数
5
解决办法
14万
查看次数

多少活动与碎片?

介绍:

基本的"片段教程"模式是这样的:

  1. 在平板电脑上,左侧有一个列表,右侧有详细信息.
  2. 两者都存在 Fragments并且两者都存在于同一个中Activity.
  3. 在手机上,有一个列表Fragment中的一个Activity.
  4. 推出一个新Activity的细节Fragment.

(例如Dianne Hackborn的Android 3.0 Fragments APIFragments API指南)

在这两个设备上,功能都在Fragments.(简单)

平板电脑上,整个应用程序是1Activity,在手机上,有很多Activities.


问题:

  • 是否有理由将手机应用程序拆分为多个Activities

此方法的一个问题是,您复制了主平板电脑Activity和单独电话中的大量逻辑Activities.

  • 使用相同的切入和切Fragments出逻辑(仅使用不同的布局),在两种情况下保留1活动模型会不会更容易?

这种方式大部分逻辑都存在于Fragments自身中,并且只有一个Activity- 更少的代码重复.

我所读到的ActionBarSherlock也是它似乎最好用Fragments而不是Activities(但我还没有使用它).

教程是否过于简化,或者我错过了这种方法的主要内容?


我们已经在办公室成功地尝试了这两种方法 - 但我即将开始一个更大的项目,并希望尽可能让自己变得容易.

一些相关问题的链接:

android android-fragments android-listfragment

184
推荐指数
3
解决办法
3万
查看次数

如何将一些数据传输到另一个片段?

如何将一些数据转移到另一个数据Fragment同样extras用于intents

android android-fragments

183
推荐指数
5
解决办法
21万
查看次数

在backstack上不调用片段onResume()和onPause()

我在一个活动中有多个片段.在按钮上单击我开始一个新片段,将其添加到backstack.我自然希望调用onPause()当前片段和onResume()新片段的方法.好吧,它没有发生.

LoginFragment.java

public class LoginFragment extends Fragment{
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      final View view  =   inflater.inflate(R.layout.login_fragment, container, false);
      final FragmentManager mFragmentmanager =  getFragmentManager();

      Button btnHome  = (Button)view.findViewById(R.id.home_btn);
      btnHome.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view){
           HomeFragment fragment    = new HomeFragment();
           FragmentTransaction ft2   =  mFragmentmanager.beginTransaction();
           ft2.setCustomAnimations(R.anim.slide_right, R.anim.slide_out_left
                    , R.anim.slide_left, R.anim.slide_out_right);
           ft2.replace(R.id.middle_fragment, fragment);
           ft2.addToBackStack(""); 
           ft2.commit();    
         }
      });
  }

  @Override
  public void onResume() {
     Log.e("DEBUG", "onResume of LoginFragment");
     super.onResume();
  }

  @Override
  public void onPause() …
Run Code Online (Sandbox Code Playgroud)

android onresume android-fragments back-stack

183
推荐指数
5
解决办法
23万
查看次数

getActivity()在Fragment函数中返回null

我有一个像这样的公共方法的片段(F1)

public void asd() {
    if (getActivity() == null) {
        Log.d("yes","it is null");
    }
}
Run Code Online (Sandbox Code Playgroud)

是的,当我调用它(来自Activity)时,它是null ...

FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction();
F1 f1 = new F1();
transaction1.replace(R.id.upperPart, f1);
transaction1.commit();
f1.asd();
Run Code Online (Sandbox Code Playgroud)

它一定是我做错了,但我不知道那是什么

null android android-context android-fragments android-activity

182
推荐指数
7
解决办法
15万
查看次数

使用ViewPager的Android.app Fragments与android.support.v4.app?

我有一个关于Android支持库,片段的问题,并且作为一个具体的例子,ViewPager该类.我的目的是创建一个与Android Developer网站上提供的示例功能类似的应用程序(http://developer.android.com/training/animation/screen-slide.htmlhttp://developer.android.com/ training/implementation-navigation/lateral.html).查看他们的代码,我注意到他们使用了android.support.v4.app库,我的研究是访问ViewPager该类的唯一方法.

在我的情况下,我对向后兼容性没兴趣.最低API级别为14(Ice Cream Sandwich),构建目标为4.2 Jelly Bean.在它最简单的形式中,我的应用程序与我在Android开发网站上链接的第二个演示完全一样 - 只需在三个选项卡之间滑动,每个选项卡中包含内容.

我读过的所有文章/帖子/答案似乎都非常支持v4支持库.现在,对于我,尽管是冗长的问题:

  1. 构建我的应用程序的最佳方法是什么 - 使用android.support.v4.app,从而使用SupportFragments,或使用提供的片段android.app- 以及为什么?

  2. 如果碎片来自android.app何方,最佳接近方式是ViewPagers什么?

  3. 如果SupportFragments最适合这项任务,我估计它们具有与另一项相同的功能 - 那么在内部拥有它们的目的是什么android.app

希望有更清楚理解的人可以给我一些澄清,因为我很难过......

android android-fragments android-viewpager android-support-library

182
推荐指数
1
解决办法
6万
查看次数

使用片段时,在Android导航抽屉图像和向上插入符之间切换

当使用导航抽屉时,Android开发人员建议在ActionBar中"只有那些在导航抽屉中表示的屏幕应该实际上具有导航抽屉图像",并且"所有其他屏幕都具有传统的向上克拉".

详情请见:http://youtu.be/F5COhlbpIbY

我正在使用一个活动来控制多个级别的片段,并且可以使导航抽屉图像在所有级别上显示和运行.

创建较低级别的片段时,我可以调用ActionBarDrawerToggle setDrawerIndicatorEnabled(false)隐藏导航抽屉图像并显示向上插入符号

LowerLevelFragment lowFrag = new LowerLevelFragment();

//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout, 
lowFrag, "lowerFrag").addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是当我导航回到最高级别的片段时,向上克拉仍然显示而不是原始的导航抽屉图像.有关如何"刷新"顶级片段上的ActionBar以重新显示导航抽屉图像的任何建议?


汤姆的建议对我有用.这是我做的:

主要活动

此活动控制应用程序中的所有片段.

在准备新片段以替换其他片段时,我将DrawerToggle设置为setDrawerIndicatorEnabled(false):

LowerLevelFragment lowFrag = new LowerLevelFragment();

//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,   
lowFrag).addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)

接下来,在覆盖中onBackPressed,我通过将DrawerToggle设置为这样来恢复上面的内容setDrawerIndicatorEnabled(true):

@Override
public void onBackPressed() {
    super.onBackPressed();
    // turn on the Navigation Drawer image; 
    // this is called in the LowerLevelFragments
    setDrawerIndicatorEnabled(true)
}
Run Code Online (Sandbox Code Playgroud)

在LowerLevelFragments中

在我修改过的片段中onCreate, …

android android-fragments android-actionbar navigation-drawer

177
推荐指数
6
解决办法
7万
查看次数

如何使WRAP_CONTENT在RecyclerView上运行

我有一个DialogFragment包含RecyclerView(卡片列表).

其中RecyclerView一个或多个CardViews可以具有任何高度.

我想DialogFragment根据CardViews其中包含的内容给出正确的高度.

通常情况下,这将是简单的,我会成立wrap_contentRecyclerView这个样子.

<android.support.v7.widget.RecyclerView ...
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"   
    android:clickable="true"   
    android:scrollbars="vertical" >

</android.support.v7.widget.RecyclerView>
Run Code Online (Sandbox Code Playgroud)

因为我使用的RecyclerView这个不起作用,请看:

https://issuetracker.google.com/issues/37001674

嵌套的Recycler视图高度不会包装其内容

在这两个页面上,人们建议扩展LinearLayoutManager和覆盖onMeasure()

我首先使用了第一个链接中提供的LayoutManager:

public static class WrappingLayoutManager extends LinearLayoutManager {

        public WrappingLayoutManager(Context context) {
            super(context);
        }

        private int[] mMeasuredDimension = new int[2];

        @Override
        public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state,
                              int widthSpec, int heightSpec) {
            final int widthMode = View.MeasureSpec.getMode(widthSpec);
            final …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-fragments android-studio android-recyclerview

176
推荐指数
8
解决办法
12万
查看次数