java - 从主要活动访问方法和内容的片段(一切都为空)
问题描述
尝试在类扩展片段中实现更改图像。MainActivity
使用FragmentPagerAdapter应用程序单击菜单中的按钮后总是崩溃。
起初,我从片段中得到一个空错误,然后用从主活动按钮单击getActivity()
发送替换这些错误。ImageView
它帮助了一会儿,然后我不得不从中移动 int 数组声明,onCreateView()
否则它又是空的,但我不得不面对的最后一个坏男孩是super(context)
.
根据谷歌的说法,由于创建活动而发生的事情随之而来onCreateView()
,getActivity()
上下文和公共变量是无法访问的。如何更换它?我应该在哪里放置一些特殊的行来从片段中获取上下文并访问其中的所有内容?
这是我的代码
//from main activity click
private void loadImage() {
ImageView v = findViewById(R.id.view_core);
FragmentHistogram frag = new FragmentHistogram();
getFragmentManager().executePendingTransactions(); //that str also did not help
frag.reseter(v);
}
//tried that in fragment but that did not help
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Activity){
a=(Activity) context;
}
}
===更新===
// in MainActivity
TabAdapter adapter;
Fragment fr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_tabs);
ViewPager viewPager = findViewById(R.id.view_pager);
TabLayout tabLayout = findViewById(R.id.tabs);
adapter = new TabAdapter(this, getSupportFragmentManager()); //FragmentPagerAdapter
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
fr = adapter.getItem(1);
}
// modified on click also in MainActivity
private void loadImage() {
((FragmentHistogram) fr).reseter(v); //FragmentHistogram fragment class with reseter() method
}
但这也不起作用,上下文再次为空。在onCreate
我已经将上下文传递this
到adapter
因此上下文已经不为空时,然后我从它的位置定义确切的片段并通过转换获取方法。但是,即使在这种情况下,我v
也reseter()
无法找到该视图,因为它的活动尚未开始。
还有一件事我忘了提。我在片段类中有一个内部类,它需要上下文。也许这就是问题所在?
class lHistogram extends View {
public lHistogram(Context context, Bitmap bi) {
super(context);
}
===更新 2===
public class TabAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 2;
private Context mContext;
public TabAdapter(Context context, FragmentManager fm) {
super(fm);
mContext = context;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FragmentCore();
default:
return new FragmentHistogram();
}
...
}
我猜这个问题可能出在片段创建顺序上。我的意思是添加到onViewCreated
日志行中,我发现无论我在其中设置的顺序Fragment getItem(int position)
总是将上下文发送到FragmentCore
,这意味着即使FragmentHistogram
显示为第一页上下文仍然在第二个。什么控制上下文分配?
解决方案
解决方案,选择 1 或 2;两者都适用于我的情况:
添加到每个Fragment
的onCreate()
,尝试调用方法setRetainInstance(true)
;
添加mcontext=getContext();
类扩展FragmentPagerAdapter
public class TabAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 2;
private Context mContext;
public TabAdapter(Context context, FragmentManager fm) {
super(fm);
mContext = context;
}
推荐阅读
- html - 在响应时相对于其他图像定位图像
- r - 如何将一个 smoothScatter 图除以另一个?
- python - 更改 Tkinter 中单元格的背景颜色?
- excel - 当值可能等于 1st=2nd 时,如何找到第 1、第 2 和第 3 个最高值的单元格地址
- ruby-on-rails - 如何根据 Rails 中第二列的值更新一列
- python - Pandas groupby 顺序不断变化(< Python 3.6)
- android - 文本大小不受字体大小变化的影响
- java - 输入保存中的 UTF-8 文本,使用“?” 字母有西班牙口音的地方
- python - 以八位字节获取对象的长度
- c++ - 如何强制 cmake 链接动态库?