相关疑难解决方法(0)

是否可以刷新片段的视图

我以编程方式更改了locale我的应用程序,如下所示:

Resources res = context.getResources();

 DisplayMetrics dm = res.getDisplayMetrics();
 android.content.res.Configuration conf = res.getConfiguration();
 conf.locale = new Locale("cn");
 res.updateConfiguration(conf, dm);
Run Code Online (Sandbox Code Playgroud)

在此之后,我想刷新当前显示的片段视图以显示新的区域设置.

所以,我首先得到当前片段(这是最新的片段backstack):

BackStackEntry latestEntry=fragMgr.getBackStackEntryAt(fragMgr.getBackStackEntryCount()-1);
String str=latestEntry.getName();
Fragment fragment=fragMgr.findFragmentByTag(str);
Run Code Online (Sandbox Code Playgroud)

在我获得当前显示的片段后,我想刷新它的视图,但是如何做到这一点?在Android中是否可以刷新片段的视图

android android-widget android-intent android-layout android-fragments

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

在活动中按ID获取片段

我有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        class="com.xamarin.recipes.filepicker.FileListFragment"
        android:id="@+id/FileListFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

之后我试图访问Activity中的FileListFragment:

var fileListFragment = SupportFragmentManager.FindFragmentById(Resource.Id.FileListFragment);
Run Code Online (Sandbox Code Playgroud)

但我在Watches for FileListFragment中得到"Unknown identifier:fileListFragment"

更新.

活动代码:

using Android.Support.V4.App;
using Android.OS;

namespace com.xamarin.recipes.filepicker
{
    [Android.App.Activity(Label = "Choose file", MainLauncher = true, Icon = "@drawable/icon")]
    public class FilePickerActivity : FragmentActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.ChooseAudio);

            var fileListFragment = (FileListFragment)SupportFragmentManager.FindFragmentById(Resource.Id.FileListFragment);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# android xamarin

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

活动中的访问片段?

我有 2 个片段的一项主要活动。两个片段都有一个ListView. 我想更新MainActivity. 有没有办法在活动中访问片段列表适配器,而无需将适配器设为静态适配器。目前我正在这样做Mainactivity.java

public void updatelist() {
  if(fragmentstate=0)
    Fragment1.adapter.notifyDataSetChanged();
  else
    Fragment2.adapter.notifyDataSetChanged();

}
Run Code Online (Sandbox Code Playgroud)

android android-listview android-fragments

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

使用 ViewPager 从 Activity 到 Fragment 的通信

我有一个 Activity 和两个 Fragment,其中tablayout包含viewpager. 现在我可以通过实现谷歌的指南回调接口从片段到活动进行通信。但是我怎样才能以另一种方式从 Activity 到 Fragment进行通信呢?如果活动中发生了一些事情(外部事件),我想更新片段。我设法获得了 Frag1 片段

MyFragmentPagerAdapter a = (MyFragmentPagerAdapter) viewPager.getAdapter();
Frag1 frag = (Frag1) a.getItem(0);
Run Code Online (Sandbox Code Playgroud)

但是当我在 frag 上调用公共方法时,我得到一个 IllegalStateException: Fragment not Attached to Activity 可能是因为 getItem(0) 返回 Frag1 的新实例并且尚未附加...有没有人可以为此提供干净的解决方案整个 Viewpager -> Activity 到 Fragment 通信?

一些代码给你:

在活动中:

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

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        if (viewPager != null) {
            viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager()));
        }

        TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
        if (tabLayout != null) {
            tabLayout.setupWithViewPager(viewPager); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-activity android-tablayout

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

在Activity中获取Fragment实例

我已将Fragment添加到Activity中

getSupportFragmentManager().beginTransaction()
                    .add(R.id.container,new MyFragment).commit();
Run Code Online (Sandbox Code Playgroud)

在哪里container是的FrameLayout

 <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

现在我怎么能像这样在Activity中 获得Fragment的实例

我必须Fragment A在获得结果后调用一种方法Fragment B.

我在Fragment B中创建了一个接口,并在Activity.Now中实现了它.我必须将结果传递给Fragment A.我无法获得Fragment A的实例.

我不想做的一件事是在Activity中创建片段A的私有实例并调用它的方法.

android interface android-fragments fragmentmanager android-framelayout

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

从fragmentActivity刷新片段UI

我想从FragmentActivity中更改片段中的ImageView(在代码中创建).(XML中没有片段和标记).

从FragmentActivity扩展的MainActivity和从GooglePlayServicesClient.ConnectionCallbacks实现的:

...
FragmentAdapter mAdapter;
ViewPager mPager;
...

public void onCreate(Bundle savedInstanceState){
    ...
    FragmentManager fm = getSupportFragmentManager();
    mAdapter = new FragmentAdapter(fm);
    mPager.setAdapter(mAdapter);
    ...}

@Override
public void onConnected(Bundle connectionHint){
//*** I want to change a ImageView on Fragment1 here
}
Run Code Online (Sandbox Code Playgroud)

从FragmentPagerAdapter扩展的FragmentAdapter:

...
private FragmentManager mFragmentManager;

public FragmentAdapter(FragmentManager fm){
    super(fm);
}

@Override
public Fragment getItem(int pos){
// String name = makeFragmentName(R.id.mainPager, pos);
// Fragment fragmentObject = mFragmentManager.findFragmentByTag(name);
Fragment fragmentObject = null;

switch(pos){
    case 0:
        fragmentObject = new Fragment1();
        break;
    ...
}

return …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager fragmentpageradapter android-fragmentactivity

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