java - 来自另一个类的多个 Activity 的 setContentView

标签 java android findviewbyid

我正在创建一个android应用程序,它需要能够在另一个全局类中的几种方法中在多个android Activity 布局上设置contentview。因此,当我从新 Activity onCreate 调用该方法时,按钮和 TextView 将由 findviewbyId 通过先前定义的类中的方法分配。示例代码如下所示。

   public void executeWorkItem() {
            setContentView(R.layout.activity_message);
            Button button = (Button) findViewById(R.id.btnSendSMS);
            button.setOnClickListener(new Button.OnClickListener() {
                public void onClick(View v) {
                    EditText textPhone = (EditText) findViewById(R.id.phoneNum);
                    EditText textSms = (EditText) findViewById(R.id.smsContent);
                    final String phoneNumber = textPhone.getText().toString();
                    final String message = textSms.getText().toString();
                    Map<String, Object> results = new HashMap<String, Object>();
                    results.put("phoneNmbr", "" + phoneNumber);
                    results.put("message", "" + message);
                }
            });
        }

因此,当我从如下所示的 Activity 中调用此方法时,应该执行该方法而不会出现 null 错误。

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    app = (MyApplication)getApplication();

     // Call a custom application method
    app.executeWorkItem();
} 

因此,我应该为此创建一个应用程序类,还是必须创建一个扩展 Activity 的对象并在其中调用该对象方法? 注意:我应该能够创建可以执行类似操作的不同方法。

最佳答案

非常容易做到。您所需要的只是一个像 BaseActivity 这样的父 Activity ,然后所有其他 Activity 都可以简单地扩展该父 Activity ,如下所示:

public class BaseActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_message);
        Button button = (Button) findViewById(R.id.btnSendSMS);
        button.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                EditText textPhone = (EditText) findViewById(R.id.phoneNum);
                EditText textSms = (EditText) findViewById(R.id.smsContent);
                final String phoneNumber = textPhone.getText().toString();
                final String message = textSms.getText().toString();
                Map<String, Object> results = new HashMap<String, Object>();
                results.put("phoneNmbr", "" + phoneNumber);
                results.put("message", "" + message);
            }
        });
    }
}

然后您的所有其他 Activity 都会扩展父 Activity ,如下所示:

public class MainActivity extends BaseActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Do not call setContentView again
    }
}

public class SecondActivity extends BaseActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Do not call setContentView again
    }
}

如果您注意到 super.onCreate(savedInstanceState) 它只是调用其父类的 onCreate 方法,在本例中为 BaseActivity(进而调用 Activity 类)。

关于java - 来自另一个类的多个 Activity 的 setContentView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31839647/

相关文章:

尝试从 API 获取 JSON 时,Java Spring 出现错误 404。从事 postman 工作

java - 使用 java-apns(notnoop) 发送 ios voip 通知

android - 如何检测用户单击 ListView 中的哪一行按钮

android - 无法解析 fragment 中的 findViewById

android - 转换到 Button 是多余的 - 为什么?

java - Hibernate 注解 - 成人和可连接(父子)

java - Spring MessageSource 基本名称路径问题

java - 如何使用 PendingIntent 将发送的短信数据传递给 BroadcastReceiver?

android - 应用内计费。如何存储用户支付过的信息?

android - findViewById 不适用于特定 View