android - Android:在 ViewFlipper 内的按钮上执行单击()?
问题描述
我有一个在 Fragment onDismiss() 之后调用的 Activity 方法“finishCardUpdateAndClose()”。在该方法中,我试图模拟单击 Activity UI 上的按钮。该按钮是 ViewFlipper 的一个元素。我尝试使用“getCurrentView()”为 ViewTreeObserver 设置一个视图,该视图引用的是 ViewFlipper 中的按钮。这可能是我的问题。
没有点击发生。但是 ViewTreeObserver 代码之前的 Toast 和之后的 Toast 正在触发,因此看起来好像在 Fragment 关闭后调用了“finishCardUpdateAndClose()”。onGlobaLayout() 中的 ViewTreeObserver 代码中的 Toast 未触发。我还尝试只使用带有按钮的 performClick(),我还尝试使用 OnClickListener,但没有成功。
我在这里尝试在 ViewFlipper 的按钮子按钮上执行 Click() 时缺少什么?
活动代码
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();
}
活动编辑.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();
}
}
解决方案
您不应该再使用 findViewById 了。使用数据绑定或视图绑定更快,将解决您的问题。
推荐阅读
- node.js - 使用 socks5 时的 Request-Promise 库错误:- RequestError:错误:getaddrinfo ENOTFOUND
- c++ - C2011 'class' 类型重新定义
- events - wxpython 4.01 / Python 3.7 中事件函数的值
- python - 当 \d 什么都不返回时,如何告诉 re 返回所有数字?
- python - __str__ 的多种输出格式
- asp.net - 如何将更改保存到数据库中
- python - Filling in null values in one column based on aggregate of a different column
- php - 如果我有带时区的时间戳,如何获取时间戳是否早于一天?
- algorithm - 优化 Haskell 中无限字符串的过滤
- python - 使用 AWS glacier list_jobs 函数列出 50 多个作业