继承自View的类都可以作为Activity的setContentView参数

本文介绍了一种在Android开发中不使用布局文件,而是直接利用继承自View的类如TextView作为Activity显示内容的方法。通过简单的示例代码展示了如何在Activity的onCreate方法中设置TextView并显示文本。

继承自View的类都可以作为Activity的setContentView参数

在Activity的onCreate中设置要显示的view时,不仅仅只有layout,自定义的View

子类可以,还可以是其他派生于View的控件,例如TextView。

示例代码如下:

可以在屏幕上显示字符串“Hello World….”

1

2

3

4

5

6

7

8

9

         @Override

         public void onCreate(Bundle savedInstanceState){

                 super.onCreate(savedInstanceState);

                 //setContentView(R.layout.main);

 

                 TextView tv=new TextView(this);

        tv.setText("Hello World....");

        setContentView(tv);

         }

 

在 Android 开发中,从非 `Activity` (例如一个普通的 Java/Kotlin 或服务)启动一个新的 `Activity` 并等待其执行结果,通常需要借助 `startActivityForResult()` 方法。然而,由于非 `Activity` 无法直接调用该方法,因此需要通过上下文(`Context`)来间接启动,并结合 `Intent` 和回调机制实现。 以下是一个可行的实现方案: ### 使用 `Context` 启动 Activity 并等待结果 假设你有一个非 `Activity` ,例如 `MyHelperClass`,你可以通过传入 `Activity` 的上下文并使用反射或接口回调来处理返回结果。 ```java public class MyHelperClass { private Context context; public MyHelperClass(Context context) { this.context = context; } public void startTargetActivity(int requestCode) { Intent intent = new Intent(context, TargetActivity.class); ((Activity) context).startActivityForResult(intent, requestCode); } } ``` 需要注意的是,这种方式要求传入的 `context` 必须是 `Activity` 实例,否则会抛出型转换异常。 ### 通过接口回调接收结果 为了更灵活地处理 `onActivityResult()` 返回的数据,可以定义一个回调接口,并在目标 `Activity` 中触发回调: ```java public interface OnActivityResultListener { void onActivityResult(int resultCode, Intent data); } public class MyHelperClass { private Context context; private OnActivityResultListener listener; public MyHelperClass(Context context, OnActivityResultListener listener) { this.context = context; this.listener = listener; } public void startTargetActivity(int requestCode) { Intent intent = new Intent(context, TargetActivity.class); ((Activity) context).startActivityForResult(intent, requestCode); } public void handleResult(int resultCode, Intent data) { if (listener != null) { listener.onActivityResult(resultCode, data); } } } ``` 然后在你的 `Activity` 中实现该接口,并重 `onActivityResult()` 方法: ```java public class MainActivity extends AppCompatActivity implements OnActivityResultListener { private MyHelperClass helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); helper = new MyHelperClass(this, this); } public void launchTargetActivity(View view) { helper.startTargetActivity(1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { helper.handleResult(resultCode, data); } } @Override public void onActivityResult(int resultCode, Intent data) { // 处理返回结果 if (resultCode == RESULT_OK) { String result = data.getStringExtra("result"); Toast.makeText(this, "Received: " + result, Toast.LENGTH_SHORT).show(); } } } ``` ### 注意事项 - 非 `Activity` 不能直接启动 `Activity` 或监听其结果。 - 如果你需要从 `Service` 或其他组件启动 `Activity` 并获取结果,可以考虑使用广播(`BroadcastReceiver`)或 `LiveData` 等方式进行通信。 - 在 Android 10 及更高版本中,使用 `startActivityForResult()` 已逐渐被 `Activity Result API` 替代,推荐使用新的架构组件以获得更好的生命周期管理 [^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值