我以编程方式更改了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
我有以下布局:
<?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) 我有 2 个片段的一项主要活动。两个片段都有一个ListView
. 我想更新MainActivity
. 有没有办法在活动中访问片段列表适配器,而无需将适配器设为静态适配器。目前我正在这样做Mainactivity.java
public void updatelist() {
if(fragmentstate=0)
Fragment1.adapter.notifyDataSetChanged();
else
Fragment2.adapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud) 我有一个 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
我已将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
我想从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