标签: android-fragments

Fragment和FragmentActivity有什么区别?

我的问题是除了明显的继承差异之外,Fragment和之间的主要区别是FragmentActivity什么?每个班级最适合哪些场景?我试图理解为什么这两个类都存在......

android android-fragments android-fragmentactivity

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

使用Fragments为Android中的每个选项卡分隔Back Stack

我正在尝试在Android应用中实现导航标签.由于不推荐使用TabActivity和ActivityGroup,我想使用Fragments来实现它.

我知道如何为每个选项卡设置一个片段,然后在单击选项卡时切换片段.但是,如何为每个选项卡分别设置一个后备堆栈?

例如,片段A和B将位于选项卡1下,片段C和D位于选项卡2下.启动应用程序时,将显示片段A并选择选项卡1.然后片段A可能被片段B替换.当选择标签2时,应显示片段C. 如果选择了选项卡1,则应再次显示片段B. 此时应该可以使用后退按钮显示片段A.

此外,重要的是在旋转设备时保持每个标签的状态.

BR马丁

tabs android android-fragments

155
推荐指数
5
解决办法
7万
查看次数

使用Fragments进行Android搜索

有人知道一个教程或如何用s 实现标准Android搜索界面的例子Fragment吗?换句话说,是否可以SearchManager在片段中使用标准搜索?

java sqlite android android-searchmanager android-fragments

155
推荐指数
7
解决办法
8万
查看次数

膨胀类片段时出错

我得到了错误

Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
Run Code Online (Sandbox Code Playgroud)

当我通过肖像和横向模式切换时.我正在使用片段.我的xml是:

 <LinearLayout android:id="@+id/mainLayout"
               android:orientation="horizontal"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content" >

    <ListView android:id="@+id/android:list"
              android:layout_height="wrap_content"
              android:layout_width="fill_parent"/> 

    <fragment android:id="@+id/fragmentDetails"
              android:layout_height="fill_parent"
              android:layout_width="fill_parent"
              class="de.androidbuch.activiti.task.TaskDetailsFragment"/> 
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

如果我通过横向和纵向模式切换一切正常.但是当我点击我的片段(我可以看到我的片段)然后切换到另一种模式时,我得到了错误.知道怎么解决吗?在这里找到了一些答案,但这些都没有帮助我...

06-21 14:55:05.600: ERROR/AndroidRuntime(7636): FATAL EXCEPTION: main
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): java.lang.RuntimeException: Unable to start activity         
ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}:   android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3097)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.access$1600(ActivityThread.java:123)
06-21 …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-fragments

154
推荐指数
13
解决办法
27万
查看次数

从DialogFragment回调片段

问题:如何创建从DialogFragment到另一个Fragment的回调.就我而言,涉及的活动应该完全不知道DialogFragment.

考虑一下我

public class MyFragment extends Fragment implements OnClickListener
Run Code Online (Sandbox Code Playgroud)

然后在某些时候我做到

DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
Run Code Online (Sandbox Code Playgroud)

MyDialogFragment的样子

protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
    DialogFragment fragment = new DialogFragment();
    fragment.listener = listener;
    return fragment;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果DialogFragment在其生命周期中暂停和恢复,则无法保证听众会出现.片段中唯一的保证是通过setArguments和getArguments通过Bundle传递的.

如果它应该是监听器,有一种方法可以引用该活动:

public Dialog onCreateDialog(Bundle bundle) {
    OnClickListener listener = (OnClickListener) getActivity();
    ....
    return new AlertDialog.Builder(getActivity())
        ........
        .setAdapter(adapter, listener)
        .create();
}
Run Code Online (Sandbox Code Playgroud)

但我不希望活动监听事件,我需要一个片段.实际上,它可以是任何实现OnClickListener的Java对象.

考虑通过DialogFragment呈现AlertDialog的Fragment的具体示例.它有Yes/No按钮.如何将这些按钮发送回创建它的Fragment?

android callback android-fragments android-dialogfragment

154
推荐指数
10
解决办法
13万
查看次数

添加到后台堆栈时,如何维护片段状态?

我写了一个在两个片段之间切换的虚拟活动.当您从FragmentA转到FragmentB时,FragmentA会被添加到后台堆栈中.但是,当我返回FragmentA(通过按回)时,会创建一个全新的FragmentA,并且它所处的状态将丢失.我感觉我跟这个问题一样,但我已经包含了一个完整的代码示例来帮助解决问题:

public class FooActivity extends Activity {
  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(android.R.id.content, new FragmentA());
    transaction.commit();
  }

  public void nextFragment() {
    final FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(android.R.id.content, new FragmentB());
    transaction.addToBackStack(null);
    transaction.commit();
  }

  public static class FragmentA extends Fragment {
    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
      final View main = inflater.inflate(R.layout.main, container, false);
      main.findViewById(R.id.next_fragment_button).setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
          ((FooActivity) getActivity()).nextFragment();
        }
      });
      return main;
    } …
Run Code Online (Sandbox Code Playgroud)

android android-fragments back-stack

150
推荐指数
6
解决办法
13万
查看次数

碎片中的碎片

我想知道这是否是Android API中的一个错误:

我有这样的设置:

?----?---------?
|    |         |
|  1 |    2    |
|    |?-------?|
|    ||       ||
|    ||   3   ||
?----??-------??
Run Code Online (Sandbox Code Playgroud)
  1. 是一个在右侧窗格中加载片段#2(搜索屏幕)的菜单.
  2. 是包含片段#3的搜索屏幕,片段#3是结果列表.
  3. 结果列表在几个地方使用(包括作为一个功能正常的高级片段).

此功能在手机上非常有效(其中1和2和3为ActivityFragments).

但是,当我使用此代码时:

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();       
    Fragment frag = new FragmentNumber2();
    if(toLoad != null) frag.setArguments(toLoad);
    transaction.replace(R.id.rightPane, frag);      
    transaction.commit();
Run Code Online (Sandbox Code Playgroud)

其中R.id.leftPaneR.id.rightPane<fragment>S IN水平线性布局.

据我所知,上面的代码删除了驻留的片段,然后用新的片段替换它.很棒......显然不会发生这种情况,因为当第二次运行此代码时会出现以下异常:

07-27 15:22:55.940: ERROR/AndroidRuntime(8105): Caused by: java.lang.IllegalArgumentException: Binary XML file line #57: Duplicate id 0x7f080024, tag null, or parent id 0x0 with another fragment for FragmentNumber3
Run Code Online (Sandbox Code Playgroud)

这是因为FragmentNumber3的容器已被复制,并且它不再具有唯一ID.在添加新的片段之前,初始片段没有被销毁(?)(在我看来,这意味着它还没有被 …

android android-fragments android-nested-fragment

145
推荐指数
4
解决办法
14万
查看次数

Android:在Activity生命周期中何时调用onCreateOptionsMenu?

我放了几个断点onCreate(一个在开头,一个在方法结束时),我也在一个开头放了一个断点onCreateOptionsMenu.onCreate首先调用该方法,并在onCreateOptionsMenu调用之前调用该方法.

我正试图Fragment在我的应用程序中分离导航代码,所以我onCreateOptionsMenu根据应用程序是否在手机/平板电脑上运行来分配给我的几个对象(我使用屏幕大小来确定这个,我的布局文件是大屏幕有一个View I在布局膨胀后检查).我遇到的问题是,我在onCreate中创建了这些对象,当我引用该对象时,我得到一个空指针异常onCreateOptionsMenu.

android oncreate android-fragments

144
推荐指数
4
解决办法
7万
查看次数

作为ViewPager的一部分更新ListFragment中的数据

我正在使用Android中的v4兼容性ViewPager.我的FragmentActivity有一堆数据,可以在我的ViewPager中的不同页面上以不同的方式显示.到目前为止,我只有3个相同的ListFragment实例,但将来我将有3个不同的ListFragments实例.ViewPager位于垂直电话屏幕上,列表不是并排的.

现在,ListFragment上的一个按钮启动一个单独的整页活动(通过FragmentActivity),它返回并且FragmentActivity修改数据,保存数据,然后尝试更新其ViewPager中的所有视图.就在这里,我被卡住了.

public class ProgressMainActivity extends FragmentActivity
{
    MyAdapter mAdapter;
    ViewPager mPager;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    ...
        mAdapter = new MyAdapter(getSupportFragmentManager());

        mPager = (ViewPager) findViewById(R.id.viewpager);
        mPager.setAdapter(mAdapter);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        ...
        updateFragments();
        ...
    }
    public void updateFragments()
    {
        //Attempt 1:
        //mAdapter.notifyDataSetChanged();
        //mPager.setAdapter(mAdapter);

        //Attempt 2:
        //HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
        //fragment.updateDisplay();
    }

    public static class MyAdapter extends FragmentPagerAdapter implements
         TitleProvider
    {
      int[] fragId = {0,0,0,0,0};
      public MyAdapter(FragmentManager fm)
      {
         super(fm);
      }
      @Override …
Run Code Online (Sandbox Code Playgroud)

android android-adapter android-fragments android-viewpager android-listfragment

141
推荐指数
5
解决办法
7万
查看次数

如何实现OnFragmentInteractionListener

我在android studio 0.8.2中有一个带导航抽屉的向导生成应用程序

我创建了一个片段并使用newInstance()添加它,我收到此错误:

com.domain.myapp E/AndroidRuntime:FATAL EXCEPTION:main java.lang.ClassCastException:com.domain.myapp.MainActivity@422fb8f0必须实现OnFragmentInteractionListener

我找不到任何地方如何实现这个OnFragmentInteractionListener?即使在android sdk文档中也找不到它!

MainActivity.java

import android.app.Activity;

import android.app.ActionBar;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.support.v4.widget.DrawerLayout;


public class MainActivity extends Activity
    implements NavigationDrawerFragment.NavigationDrawerCallbacks {

/**
 * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
 */
private NavigationDrawerFragment mNavigationDrawerFragment;

/**
 * Used to store the last screen title. For use in {@link #restoreActionBar()}.
 */
private CharSequence mTitle;

@Override
protected void onCreate(Bundle …
Run Code Online (Sandbox Code Playgroud)

android android-fragments

141
推荐指数
7
解决办法
18万
查看次数