如何将布局作为函数参数传递

4

这可能是一个非常简单的问题,但我却卡在了这个问题上。

我有一个在我的应用程序中被多次调用的函数。 我想重构它,但我不知道如何将 findViewById 的值作为参数传递。

请问你知道如何做吗?


public void configureToolbar() {
        mToolbar = (Toolbar) findViewById(R.id.activitySettingsToolbar);
        mToolbar.setElevation(0);
        mToolbar.setTitle("");

        setSupportActionBar(mToolbar);
    }

编辑:

目前,我可以使用 configureToolbar(Activity activity, Toolbar mToolbar) 实现此操作,结果如下:


public void configureToolbar(Activity activity, Toolbar toolbar) {
       toolbar= (Toolbar) findViewById(R.id.activitySettingsToolbar);
       toolbar.setElevation(0);
       toolbar.setTitle("");

       ((AppCompatActivity)activity).setSupportActionBar(toolbar);
   }

但是如果我想要更改我的布局,我需要能够将其作为参数传递 :/


configureToolbar(Toolbar mToolBar) ? and call it by configureToolbar((Toolbar)findViewById(R.id.x)) - Alan
创建如下函数 configureToolbar(Toolbar toolBar){ // 函数体} - Abid Khan
1
@AbidKhan 这是Java,不是Kotlin。 - a_local_nobody
3个回答

7

您可以潜在地通过工具栏的ID传递:

public void configureToolbar(int id) {
    mToolbar = (Toolbar) findViewById(id);
    mToolbar.setElevation(0);
    mToolbar.setTitle("");

    setSupportActionBar(mToolbar);
}

然后您可以使用以下方式调用:

configureToolbar(R.id.yourToolbarId)// in your case this is R.id.activitySettingsToolbar or any other toolbar Id

After edit from OP :

 public void configureToolbar(Activity activity, int toolbarId) {
 Toolbar toolbar= (Toolbar) activity.findViewById(toolbarId);
   if(toolbar != null) { //credit to @Gabriele Mariotti, I missed this check
   toolbar.setElevation(0);
   toolbar.setTitle("");

   ((AppCompatActivity)activity).setSupportActionBar(toolbar);
 }
}

然后你使用以下方式调用:
configureToolbar(yourActivity, R.id.yourToolbarId)

4
你可以这样做:
private void setupToolbar(int resource){
    Toolbar toolbar = findViewById(resource);
    if (toolbar != null){
      //....
    }
}

0

传递布局参数的最佳方式是使用@LayoutRes注释:

fun buildDialog(@LayoutRes viewId : Int) {

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接