微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android:在 ViewFlipper 内的按钮上执行单击?

如何解决Android:在 ViewFlipper 内的按钮上执行单击?

我有一个 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();
    }
}

解决方法

您不应再使用 findViewById。 使用数据绑定或视图绑定更快,可以解决您的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。