我正在尝试使用包含小部件的片段实现卡片翻转动画,因此我需要访问片段,但我没有成功。
我可以将片段附加到活动中的占位符视图中,并在两个片段之间来回切换,但无法访问片段。
我尝试添加带有和没有标记的片段,无论如何,我总是从findFragmentById或findFragmentByTag获得null响应。
以下是我的代码段 - 提前感谢任何见解。
private int row;
private int col;
private String matrix[][] = new String[row][col];
//constructor for calss matricDec
public void matrixIni(int row, int col){
this.row = row;
this.col = col;
//matrix[1][1] = "test";
//System.out.println(matrix[1][1]);
}
答案 0 :(得分:1)
问题是您在提交findFragmentByTag()
后立即致电findFragmentById()
和/或FragmentTransaction
。
片段事务本质上是异步的。你已经告诉系统你想要它添加你的片段,它会...但它不一定会瞬间完成(虽然有时它可能)。
您可以通过将.commit()
替换为.commitNow()
或.commitNowAllowingStateLoss()
来使事务同步,但通常我不建议这样做。我认为你最好只接受事务是异步的事实。
将取决于findFragmentByTag()
或findFragmentById()
的结果的任何代码移出onCreate()
并移至onResumeFragments()
(或移入碎片本身)。
@Override
protected void onResumeFragments() {
super.onResumeFragments();
controlFragment = (ControlFragment)getFragmentManager().findFragmentByTag("fragment_tag");
controlFragment = (ControlFragment)getFragmentManager().findFragmentById(R.id.card_placeholder_view);
}
我刚刚意识到你正在扩展Activity
而不是AppCompatActivity
,所以onResumeFragments()
不存在。相反,您可以使用onAttachFragment()
:
@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);
if (fragment instanceof ControlFragment) {
controlFragment = (ControlFragment)fragment;
}
}