Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从视图中完成活动_Java_Android_View - Fatal编程技术网

Java 如何从视图中完成活动

Java 如何从视图中完成活动,java,android,view,Java,Android,View,我有一个自定义视图的活动 我必须添加活动结果: public class ActView extends Activity implements OnClickListener { <...code...> @Override protected void onCreate(Bundle savedInstanceState) { <...code...> layout = (LinearLayout) findViewById(R.id

我有一个自定义视图的活动

我必须添加活动结果:

    public class ActView extends Activity implements OnClickListener {
<...code...>
@Override
    protected void onCreate(Bundle savedInstanceState) {
    <...code...>
     layout = (LinearLayout) findViewById(R.id.chart_container);
        timelineview = new VDrawTimeLine(this,contentFull);
        timelineview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        timelineview.setBackgroundColor(0xffffffff);
        timelineview.setVisibility(View.VISIBLE);

        layout.addView(timelineview);

    <...code...>
    }
}

由于您使用的
上下文是
活动的上下文,因此可以将视图的上下文强制转换为活动,并调用finish()

例如:

private void finishFunction() {
   Activity activity = (Activity)getContext();
   activity.finish();
}

从设计角度来看,在Android Kotlin的MVVM数据绑定中如何从视图模型类关闭活动可能不是最佳选择

您应该从活动中传递视图模型类中的context/acitivity引用,如下所示

private lateinit var registerViewModel: RegisterViewModel
在创建方法时初始化它

registerViewModel = RegisterViewModel(this)
扩展到BaseObservable()的RegisterViewModel类

在下面编写代码,以便在单击按钮时关闭活动

fun handleOnClick(view: View) {
        when (view.id) {
            R.id.registerBTN -> {
                val activity = context as Activity
                activity.finish()
            }
            else -> Toast.makeText(context, "To-DO", Toast.LENGTH_SHORT).show()
        }
    }
您可以在layout.xml文件中定义,如下所示

<Button
                android:id="@+id/registerBTN"
                style="@style/Widget.AppCompat.Button.Colored"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:enabled="@{registerViewModel.isAllowRegister}"
                android:layout_marginVertical="32dp"
                android:text="@string/register"
                android:onClick="@{registerViewModel::handleOnClick}"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/passwordET" />

谢谢。它给了我想要的。可能有点复杂,但它是有效的。
fun handleOnClick(view: View) {
        when (view.id) {
            R.id.registerBTN -> {
                val activity = context as Activity
                activity.finish()
            }
            else -> Toast.makeText(context, "To-DO", Toast.LENGTH_SHORT).show()
        }
    }
<Button
                android:id="@+id/registerBTN"
                style="@style/Widget.AppCompat.Button.Colored"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:enabled="@{registerViewModel.isAllowRegister}"
                android:layout_marginVertical="32dp"
                android:text="@string/register"
                android:onClick="@{registerViewModel::handleOnClick}"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/passwordET" />