我在FragmentActivity中使用ListFragment以及SimpleCursorAdapter和修改过的CursorLoader.修改后的CursorLoader只发出rawQueries - 没有其他更改.
在FragmentActivity中的某个时刻,我需要重新获取在ListFragment中提供ListView的数据/光标.
我怎样才能做到这一点?
提前谢谢了.
这是FragmentActivity调用ListFragment中的方法:
public class ActivityList extends FragmentActivity {
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) {
...
processUpdateList();
}
...
private void processUpdateList() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragmentlist);
if (fragment != null) {
((FragmentList) fragment).requeryList();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里是ListFragment,该方法应该启动对ListView的重新查询,重新加载或重新绘制.ListView.invalidate()没有帮助 - 它没有改变显示的数据.
public class FragmentList extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
private SimpleCursorAdapter adapter;
private Context context;
private ListView listView;
public void requeryList() {
// listView.invalidate(); didn't re-query
// TODO: How???
} …Run Code Online (Sandbox Code Playgroud) android listview simplecursoradapter android-fragments android-fragmentactivity
我正在使用"Tabs + Swipe"项目,我很难删除片段.
我正在做的步骤:
问题: 执行删除后,由于某种原因,我仍然可以向右滚动并看到一个空片段.我不能选择它,它只是反弹回来.似乎片段没有被移除,而是从左侧将其位置更改为标签.
我的适配器:
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new TabFragment();
Bundle args = new Bundle();
args.putInt(TabFragment.ARG_TAB_POSITION, position);
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return tabsList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return tabsList.get(position).getTitle();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
FragmentManager manager = ((Fragment)object).getFragmentManager(); …Run Code Online (Sandbox Code Playgroud) 绑定服务是否更好FragmentActivity:
bindService(Intent, ServiceConnection, int);
Run Code Online (Sandbox Code Playgroud)
或者Fragment:
getActivity().bindService(Intent, ServiceConnection, int);
Run Code Online (Sandbox Code Playgroud)
什么是更好的做法?
片段是活动吗?片段和FragmentActivity有什么区别?
android android-fragments android-activity android-fragmentactivity
自从最新的ADT更新到第17版以来,我似乎遇到了一个棘手的问题.
我做了一个简单的应用程序来说明我的问题,我不知道我做错了什么.我的应用程序的主要活动是继承自支持包中的FragmentActivity,并且某种程度上应用程序在启动时崩溃.
为了说明,我做了一个示例项目.
首先,这里是我的虚拟类DummyProjectActivity的代码,非常简单:
public class DummyProjectActivity extends FragmentActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,有清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="be.emich.labs"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".DummyProjectActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
.jar文件在项目中正确导入,我得到了这个堆栈跟踪:
E/AndroidRuntime(11509): FATAL EXCEPTION: main
E/AndroidRuntime(11509): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{be.emich.labs/be.emich.labs.DummyProjectActivity}: java.lang.ClassNotFoundException: be.emich.labs.DummyProjectActivity
E/AndroidRuntime(11509): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1879)
E/AndroidRuntime(11509): at …Run Code Online (Sandbox Code Playgroud) 我可以先将一个片段添加到视图中,然后"分离"它,然后将其"重新附加"到另一个视图中吗?
在代码中,我想:
fragOne one = new fragOne();
getSupportFragmentManager().beginTransaction()
.add(R.id.left, one, "tag").commit();
getSupportFragmentManager().beginTransaction()
.detach(one).commit(); // or .remove(), or .addToBackStack(null).remove()
getSupportFragmentManager().executePendingTransactions();
getSupportFragmentManager().beginTransaction()
.add(R.id.right, one).commit();
Run Code Online (Sandbox Code Playgroud)
但它会引发错误:
04-05 13:28:03.492: E/AndroidRuntime(7195): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.trybackstack/com.example.trybackstack.MainActivity}: java.lang.IllegalStateException: Can't change container ID of fragment fragOne{40523130 #0 id=0x7f080000 tag}: was 2131230720 now 2131230721
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
android android-layout android-fragments android-fragmentactivity fragmenttransaction
我在使用Tabs/Swiping处理Fragments时遇到了很多麻烦.我有一个活动和两个碎片,一个有ListView.我想要的是当我使用ListView从片段1滑动到片段时,刷新ListView或者如果可能的话重新创建第二个片段....
我现在正在尝试的是像这样使用FragmentTransaction.replace():
public void onTabSelected(Tab arg0, android.app.FragmentTransaction arg1) {
// TODO Auto-generated method stub
Fragment frag = new FragmentTwo();
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
if (arg0.getPosition() == 1) {
trans.replace(R.id.pager, frag);
trans.addToBackStack(null);
trans.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
所以我认为当我滑动到选项卡2(也就是ListView的选项卡)时,它会用它创建的新选项替换它.实际发生的是当我滑动到选项卡2时,它使用ListView重新创建片段(我知道因为我在onCreateView中有一个对话框显示在屏幕上),但片段/选项卡是空白/黑色.我究竟做错了什么?创建的这个片段在哪里?
我不知道片段的代码是否相关,但请告诉我是否应该发布它,我可以这样做.这是我的PagerAdapter类.
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new FragmentOne();
case 1:
return new FragmentTwo();
case 2:
return new FragmentThree();
}
return null;
}
@Override
public int getCount() …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager android-fragmentactivity
由于某些特定原因,我正在制作一个使用谷歌地图的应用程序.所以我在Android Studio中创建了一个Google Maps应用程序,我得到了一个扩展FragmentActivity的活动.一切都很完美,但现在我想在屏幕顶部添加操作栏.问题是地图占据了整个屏幕,我不知道如何修复它
这是我的活动代码:
public class MainActivity extends FragmentActivity implements LocationListener {
private GoogleMap mMap; // Might be null if Google Play services APK is not available.
double lon = 0;
double lat = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setUpMapIfNeeded();
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
public void showSettingsAlert(){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
// Setting Dialog Title
alertDialog.setTitle("GPS settings");
// Setting Dialog Message
alertDialog.setMessage("GPS is not enabled. Do you want to go …Run Code Online (Sandbox Code Playgroud) android android-fragments android-actionbar android-fragmentactivity
我试图在viewpager中的另一个片段中添加一个片段getChildFragmentManager().我得到了以下错误,
java.lang.IllegalStateException:Activity已在android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1549)的android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:654)在android下被销毁.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:625)at com.lakeba.gameon.userprofile.UserProfileContainerFragment.replaceFragment(UserProfileContainerFragment.java:72)
我试过这个解决方法,但仍然得到相同的错误.
UserProfileContainerFragment.java
public class UserProfileContainerFragment extends CustomFragment {
private View rootView;
private Fragment fragment1;
public UserProfileContainerFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public static UserProfileContainerFragment newInstance() {
UserProfileContainerFragment fragment = new UserProfileContainerFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
rootView = inflater.inflate(R.layout.fragment_user_profile_container, container, false);
if(savedInstanceState == null) {
UserProfileFragment …Run Code Online (Sandbox Code Playgroud) 我有一个 Activity 和 fragment,它是通过jetpack navigation解决的。
我的一项活动已在 AndroidManifest.xml 文件中launchMode设置为singleTop。
当我startActivity在我的片段中使用方法时,如果调用方任务的堆栈顶部已经有一个相同类型的 Activity 实例,它会按预期工作,不会创建任何新的 Activity。
但是如果使用startActivityForResult那么新的 Activity 实例会继续创建,即使它已经在后堆栈的顶部。
我在最新的 Android 9 版本上遇到了这个问题。我在旧版本的 Android (4.1) 上测试了我的代码,singleTop启动模式按预期工作。
如果我使用以下代码以编程方式设置启动模式,那么有趣的是:
val intent = Intent(context, T::class.java)
intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP
Run Code Online (Sandbox Code Playgroud)
singleTop启动模式可以startActivityForResult在 Android 9 上正常工作,没有任何问题。
那么为什么它不能从 AndroidManifest.xml 工作?我错过了什么?
android android-fragments android-activity kotlin android-fragmentactivity