来自另一个类的多个活动的setContentView

时间:2015-08-05 18:00:50

标签: java android findviewbyid

我正在创建一个Android应用程序,它需要能够在另一个全局类中的几个方法中设置多个android活动布局的内容。因此,当我从一个新的活动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);
                }
            });
        }

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

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

    app = (MyApplication)getApplication();

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

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

2 个答案:

答案 0 :(得分:2)

很容易做到。您只需要像BaseActivity这样的父活动,然后所有其他活动都可以简单地扩展父活动,如下所示:

'C2' = Disaffiliated

然后你的所有其他活动都会扩展父活动:

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);
            }
        });
    }
}

如果您注意到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 } } 它只是调用它的父类的onCreate方法,在本例中是BaseActivity(后者又调用Activity类)。

答案 1 :(得分:0)

我不确定我的问题是否完全正确,但也许您应该为您的活动创建基类,以便在Public Sub addColumns() Dim intHeaderRow as Integer intHeaderRow = 1 For i = sheets(1).usedrange.columns.count to 1 step -1 addColumn(sheets(1).cells(intHeaderRow, i)) Next End Sub Public Sub addColumn(byval SearchString as string) Dim intColumnFound as integer Application.FindFormat.Clear ' loop through all sheets For Each sh In Worksheets 'Find first instance on sheet Set cl = sh.Cells.Find(What:=SearchString, _ After:=sh.Cells(1, 1), _ LookIn:=xlValues, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ SearchFormat:=False) If Not cl Is Nothing Then intColumnFound = cl.Column sh.Columns(intColumnFound + 1).Insert ' if found, remember location sh.Columns(intColumnFound + 1).ColumnWidth = 6 End If Next End Sub 上连接所有常见的侦听器和其他内容。您的布局应该包含基类期望找到的所有按钮(很可能您可能想要使用onCreate()<include>see docs)。或者您可以考虑使用<merge>但是这对你来说可能更有用。

PS:我不知道Fragments正在做什么,但你确定应用程序类适合它吗?

修改

  

我不确定。我想从单个类/活动

处理多个活动的多个布局

这只是关于如何传递要使用的layoutId的问题。您可以使用app.executeWorkItem();之类的方法创建基类摘要,然后您的基数abstract int getLayoutId())只需要执行onCreate(),或者您可以删除基数setContentView(getLayoutId());,而是覆盖onCreate()在那里做你的布线(但我真的不喜欢那样)。