问题描述
我有一个 Activity 方法“finishCardUpdateAndClose()”,它在 Fragment onDismiss() 之后调用。在该方法中,我试图模拟点击活动 UI 上的按钮。该按钮是 ViewFlipper 的一个元素。我尝试为 ViewTreeObserver 设置一个视图,该视图使用“getCurrentView()”引用 ViewFlipper 中的按钮。这可能是我的问题。
没有点击发生。但是 ViewTreeObserver 代码之前的 Toast 和之后的 Toast 正在触发,因此看起来好像在 Fragment 关闭后正在调用“finishCardUpdateAndClose()”。 onGlobaLayout() 中 ViewTreeObserver 代码中的 Toast 未触发。我也尝试过在按钮上使用 performClick(),我也尝试过使用 OnClickListener,但没有成功。
尝试对 ViewFlipper 的按钮子级执行 performClick() 我错过了什么?
活动代码
private View saveButtonEdits;
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
viewFlipper = findViewById(R.id.viewFlipper1);
*saveButtonEdits = viewFlipper.getCurrentView().findViewById(R.id.saveButtonRVEdits);*
}
@Override
public void finishCardUpdateAndClose() {
Toast.makeText(AddorUpdateCardActivity.this,"finishCardUpdateAndClose run after Frag",Toast.LENGTH_LONG).show();
ViewTreeObserver vto = saveButtonEdits.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
saveButtonEdits.performClick();
vto.removeOnGlobalLayoutListener(this);
Toast.makeText(AddorUpdateCardActivity.this,"performClick",Toast.LENGTH_LONG).show();
}
});
Toast.makeText(AddorUpdateCardActivity.this,"post-performClick!",Toast.LENGTH_LONG).show();
}
activity_edit.xml
...
<ViewFlipper
android:id="@+id/viewFlipper1"
android:layout_width="wrap_content"
android:layout_height="44dp"
android:layout_marginBottom="5dp" >
<include layout="@layout/cardview_nobuttons"
android:id="@+id/cardviewNobuttons" />
<include layout="@layout/cardview_twobuttonsedits"
android:id="@+id/cardviewTwobuttonsEdits" />
...
</ViewFlipper>
cardview_twobuttonsedits.xml
...
<Button
*android:id="@+id/saveButtonRVEdits"*
android:text="Save"
android:onClick="onClickSaveEdits" />
片段
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
if(getActivity() !=null) {
viewFlipper.setDisplayedChild(viewFlipper.indexOfChild(getActivity().findViewById(R.id.cardviewTwobuttonsEdits)));
mListener.finishCardUpdateAndClose();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)