标签: android-fragmentactivity

如何从FragmentActivity更新ListFragment中的ListView?

我在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

10
推荐指数
1
解决办法
7186
查看次数

Tabs + ViewPager + FragmentStatePagerAdapter - 如何删除片段?

我正在使用"Tabs + Swipe"项目,我很难删除片段.

我正在做的步骤:

  1. 从数据库中删除选项卡
  2. 从FragmentStatePagerAdapter数据源中删除选项卡
  3. 从actionBar中删除选项卡.
  4. 使用Support FragmentManager删除片段.

问题: 执行删除后,由于某种原因,我仍然可以向右滚动并看到一个空片段.我不能选择它,它只是反弹回来.似乎片段没有被移除,而是从左侧将其位置更改为标签.

我的适配器:

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)

android android-fragments android-fragmentactivity

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

将服务绑定到FragmentActivity或Fragment?

绑定服务是否更好FragmentActivity:

bindService(Intent, ServiceConnection, int);
Run Code Online (Sandbox Code Playgroud)

或者Fragment:

getActivity().bindService(Intent, ServiceConnection, int);
Run Code Online (Sandbox Code Playgroud)

什么是更好的做法?

service android android-fragments android-fragmentactivity

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

9
推荐指数
1
解决办法
5815
查看次数

ADT r17的jar文件问题

自从最新的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)

android android-fragmentactivity

9
推荐指数
1
解决办法
3341
查看次数

Android Fragment - 从一个视图移动到另一个视图?

我可以先将一个片段添加到视图中,然后"分离"它,然后将其"重新附加"到另一个视图中吗?

在代码中,我想:

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

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

在ViewPager中替换片段显示空白屏幕?

我在使用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

9
推荐指数
1
解决办法
9152
查看次数

将操作栏添加到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

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

ChildFragmentManager java.lang.IllegalStateException:Activity已被销毁

我试图在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)

java android android-fragments android-fragmentactivity

9
推荐指数
1
解决办法
1488
查看次数

使用 singleTop 启动模式的 startActivityForResult 在 Android 9 上无法正常工作

我有一个 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

9
推荐指数
0
解决办法
614
查看次数