标签: fragmenttransaction

如何使用片段替换ViewPager

我有以下布局

<RelativeLayout 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" >


<android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
Run Code Online (Sandbox Code Playgroud)

Everyting is workinf fine,但我想用Fragment替换ViewPager

getSupportFragmentManager().beginTransaction()
                .replace(R.id.view_pager, new CustomFragment())                 
                .commit();
Run Code Online (Sandbox Code Playgroud)

这不是诋毁ViewPager我该怎么办?

android android-fragments android-viewpager fragmenttransaction

5
推荐指数
1
解决办法
3909
查看次数

如何实现FragmentManager和FragmentTransaction来替换单个片段?

我有3个片段的活动; 标题; 身体; 页脚(与HTML中的点相同).bodyfragment包含三个按钮,每个按钮应该用另一个按钮替换中间片段(body;本身),但我无法弄清楚如何在这里使用FragmentManager和FragmentTransition.在其他人的问题上,我似乎无法找到关于其他人实施其片段的方式的任何一致性.似乎每个人都有自己的方法,或者只是没有在他们的线程中包含完整的代码.

MainActivity.java

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.test_frag);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

}

TestFragment.java

public class TestFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    return inflater.inflate(R.layout.test_frag, container, false);
}
Run Code Online (Sandbox Code Playgroud)

}

BodyFragment.java

public class BodyFragment extends Fragment {

@Override …
Run Code Online (Sandbox Code Playgroud)

android fragment fragmenttransaction fragmentmanager

5
推荐指数
1
解决办法
4万
查看次数

碎片onCreateView和onActivityCreated未在旋转时调用

我正在使用片段并在backstack上推送新片段但是当我将片段旋转两次片段时onCreateView,onActivityCreated片段生命周期方法中的所有内容永远不会被调用留下空白屏幕.只有在将片段添加到backstack或返回到Backstack中的第一个片段时才会发生这种情况.

这是我的活动的片段处理方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Injection
    MormonChannel.injectActivity(this);

    setDrawerIndicatorEnabled(true);

    // Do not set currentNavigationItem here.
    NavigationItemSelectedEvent.NavigationItem navItem = null;
    Intent intent = getIntent();
    if (intent != null) {
        navItem = (NavigationItemSelectedEvent.NavigationItem)
        intent.getSerializableExtra(EXTRA_NAV_ITEM);
    }

    if (savedInstanceState == null) {
        FragmentManager fm = getSupportFragmentManager();
        fm.beginTransaction().replace(R.id.container, new FeatureListFragment()).commit();
        if (navItem != null) {
            onNavigationItemSelected(new NavigationItemSelectedEvent(navItem));
        } else {
            currentNavigationItem = NavigationItemSelectedEvent.NavigationItem.FEATURES;
        }
    }

}

@Subscribe
public void onNavigationItemSelected(NavigationItemSelectedEvent event) {

    if (currentNavigationItem == event.getNavigationItem()) { …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragmenttransaction

5
推荐指数
1
解决办法
9388
查看次数

使用fragmentTransaction隐藏/显示片段不起作用

我希望我的活动包含2个片段,并使用操作栏上的按钮在它们之间切换.所以这是我的活动的布局:

<?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical">

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

在activity的onCreate()中,我将两个片段添加到容器中...因为我需要在secondFragment之前执行firstFragment,所以我先添加它,然后隐藏secondFragment,这样用户将按正确的顺序看到片段:

if (findViewById(R.id.fragment_container) != null) {
        if (savedInstanceState != null) {
            return;
        }
        FirstFragment firstFragment = new FirstFragment();
        SecondFragment secondFragment = new SecondFragment();
        firstFragment.setArguments(getIntent().getExtras());
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment, "FirstFragment")
                .add(R.id.fragment_container, secondFragment, "SecondFragment")
                .hide(secondFragment)
                .commit();
    }
Run Code Online (Sandbox Code Playgroud)

当用户触摸操作栏上的按钮时,会执行以下方法,并且应该隐藏一个片段并显示另一个片段,但没有任何反应......

public void changeFragment(int id){
    Fragment secondFragment = new SecondFragment();
    Fragment firstFragment = new FirstFragment();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction()
            .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
    switch (id){
        case 1:
            //show 2nd
            transaction.hide(firstFragment)
                    .show(secondFragment)
                    .commit();
            break; …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragmenttransaction

5
推荐指数
1
解决办法
4526
查看次数

如何等待直到碎片被移除

我有一个带有动态片段的活动。我需要删除片段运行一些代码但该代码remove(myFragment).commit()是异步执行的,我不知道何时确切删除了片段。这是我的代码:

final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.remove(myFragment).commit();
//wait until the fragment is removed and then execute rest of my code
Run Code Online (Sandbox Code Playgroud)

从文档中:

公共抽象int commit()

安排此事务的提交。提交不会立即发生;它将在下次线程准备好时安排为主线程上的工作进行安排。

android android-fragments fragmenttransaction

4
推荐指数
1
解决办法
2531
查看次数

Android TextInputLayouts 在片段事务中返回时丢失文本/内容

我已经搜索了一段时间,但我认为大多数报告的错误(并且有很多)android.support.design.widget.TextInputLayout与这个略有不同。至少,我已经解决了大多数其他错误,但在这个问题上很挣扎。我目前Fragment在我的活动中有几个TextInputLayout这样的

<android.support.design.widget.TextInputLayout
    android:id="@+id/input1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint1"
        android:inputType="numberSigned" />
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:id="@+id/input2
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint2"
        android:inputType="numberSigned"/>
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:id="@+id/input3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint3"
        android:inputType="numberSigned">
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

并且,在满足一些外部条件(不重要)之后,我打开并显示隐藏上述片段的另一个片段(100% 屏幕)。如果您想知道这个新片段要求我在特定情况下需要的一些额外字段。这是处理新创建的代码Fragment

Fragment2 fragment2 = new Fragment2();
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction()
                                .replace(((ViewGroup) getView().getParent()).getId(), fragment2);
transaction.addToBackStack(Fragment1.class.getSimpleName());
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

但问题是,当返回(按下后退按钮、工具栏/操作栏主页按钮等)到第一个片段时。我所有的人都TextInputLayouts失去了插入他们的文字。这真的很烦人,而且在专门使用 时并没有发生EditText,就像我们之前的 Material Design 过渡一样。

此外,如果不是使用 a 替换片段FragmentTransaction,而是开始一个新的Activity. 不幸的是,这并不是我们真正想要的。我们不应该需要做这种解决方法。

有任何想法吗?有人遇到过这种情况吗?

android android-fragments fragmenttransaction material-design android-textinputlayout

4
推荐指数
1
解决办法
820
查看次数

按下后退按钮后调用onStart和onCreateActivity片段

场景:
我有一个单独Activity的,我multiple fragmentsreplacing一个片段与另一个使用fragment transaction并添加到BackStack.我正在对一些片段进行JSON解析和网络相关任务.

问题: 我的问题是,在我按下后退按钮后,更换片段后,再次调用最后一个片段onStartonActivityCreated方法.我在这些事件中的代码每次我执行navigatefragment使用back button

但是EditText,即使在replacing片段之后并且使用后退按钮返回到它, 任何值都保持不变.

为什么onStartonActivityCreated每次执行?有没有什么方法可以让我的代码在返回片段后不执行?

更新 基本上我想在创建片段后设置按钮文本.用户可以更改该文本.但当我返回到该片段时,用户值会更改为我在片段创建时设置的默认文本.

谢谢

android android-fragments fragmenttransaction

3
推荐指数
1
解决办法
5238
查看次数

没有找到id的视图 - DialogFragment + Fragment

我有一个简单布局的DialogFragment.我想添加一个片段(并在将来将此片段替换为另一个片段)到DialogFragment布局内的FrameLayout.但是,添加新片段的方法失败,并显示错误:

片段Fragment_AlertsManage {41e7cb68}"找不到id 0x7f0b004f com.kennel39.diabeteslive_adtdev:id/frameAlertsContainer的视图"

我检查了我的xml,尝试了不同的方法,并在stackoverflow上读了一些类似的问题,但我找不到解决方案.

public class DialogManageAlerts extends DialogFragment{
static int patient_id;

public static DialogManageAlerts newInstance(int given_patient_id){
    DialogManageAlerts frag = new DialogManageAlerts();
    patient_id = given_patient_id;

    Bundle bund = new Bundle();
    bund.putInt("Patient_id", patient_id);
    frag.setArguments(bund);
    return frag;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View mainView = inflater.inflate(R.layout.dialog_alerts_master, container, false);              
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    FragmentManager myFragmentManager = getFragmentManager();
    FragmentTransaction myTransact = myFragmentManager.beginTransaction();
    Fragment_AlertsManage manageAlertsFragment = new Fragment_AlertsManage();
    myTransact.add(R.id.frameAlertsContainer, manageAlertsFragment);
    myTransact.commit();

    return mainView;
}
Run Code Online (Sandbox Code Playgroud)

layout.dialog_alerts_master:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-dialogfragment fragmenttransaction android-nested-fragment

3
推荐指数
1
解决办法
2208
查看次数

如果没有覆盖android中的onBackPressed()方法,addToBackStack()方法无效

这是我编写的MainActivity的代码.我在第一个屏幕上加载片段列表.当用户点击任何列表项时,行星名称将在我在单独的类中定义的详细信息片段中显示给用户.

我将"Fragment Planet List" - >"Fragment Planet Detail"的交易添加到后台.所以我期待的是当我按行星细节片段的后退按钮时,它应该在手机中加载行星列表.但事情并非如此.

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.FrameLayout;

import com.meditab.fragments.fragment.FragmentPlanetDetail;
import com.meditab.fragments.fragment.FragmentPlanetList;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends ActionBarActivity implements Callback {

    private FrameLayout frmPlanetList;
    private FrameLayout frmPlanetDetail;
    private boolean isPhone;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        frmPlanetList = (FrameLayout) findViewById(R.id.frmPlanetList);
        frmPlanetDetail = (FrameLayout) findViewById(R.id.frmPlanetDetail);

        if (null != frmPlanetDetail) {
            isPhone = false;
        } else {
            isPhone = true;
        }

        FragmentManager fragmentManager …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragmenttransaction onbackpressed

3
推荐指数
1
解决办法
1811
查看次数

如何修复InstantiationException,无法实例化Fragment?

这是我的第一篇文章,所以我提前道歉...

我正在尝试编译一个简单的Drawer示例/练习应用程序.但是,当我点击列表视图中的项目时,它会崩溃.Logcat说它无法从android.app.Fragment实例化.我也试过使用android.support.v4库 - 假设我正确实现了它,这是可疑的 - 具有相同的结果.坦率地说,我不确定区别是什么.我完全难过了.请帮忙!

主要活动:

package pac.gazette;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    private String[] fragmentNames;
    private String[] fragmentAddresses;

    private DrawerLayout drawer;
    private ListView drawerList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fragmentNames = getResources().getStringArray(R.array.fragment_names);
        fragmentAddresses = getResources().getStringArray(
                R.array.fragment_options);
        drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawerList = (ListView) findViewById(R.id.left_drawer);
        drawerList.setAdapter(new ArrayAdapter<String>(this,
                R.layout.drawer_list, fragmentNames));
        drawerList.setOnItemClickListener (new CustomClickListener());

    } …
Run Code Online (Sandbox Code Playgroud)

android instantiationexception android-fragments fragmenttransaction navigation-drawer

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