我有以下布局
<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
我有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) 我正在使用片段并在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) 我希望我的活动包含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) 我有一个带有动态片段的活动。我需要在删除片段后运行一些代码,但该代码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.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
场景:
我有一个单独Activity的,我multiple fragments是replacing一个片段与另一个使用fragment transaction并添加到BackStack.我正在对一些片段进行JSON解析和网络相关任务.
问题:
我的问题是,在我按下后退按钮后,更换片段后,再次调用最后一个片段onStart和onActivityCreated方法.我在这些事件中的代码每次我执行navigate到fragment使用back button
但是EditText,即使在replacing片段之后并且使用后退按钮返回到它,
任何值都保持不变.
为什么onStart和onActivityCreated每次执行?有没有什么方法可以让我的代码在返回片段后不执行?
更新 基本上我想在创建片段后设置按钮文本.用户可以更改该文本.但当我返回到该片段时,用户值会更改为我在片段创建时设置的默认文本.
谢谢
我有一个简单布局的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
这是我编写的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) 这是我的第一篇文章,所以我提前道歉...
我正在尝试编译一个简单的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