gpt4 book ai didi

android - 如何在 Baseactivity 和子 Activity 中处理 butterknife 绑定(bind)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:06:01 27 4
gpt4 key购买 nike

有一个具有布局的 BaseActivity 和一个扩展此 BaseActivity 的子 Activity。

如何绑定(bind) View ,以便 BaseActivity 中的 View 绑定(bind)到 BaseActivity 中,而 Sub Activity 中的 View 绑定(bind)到那里?

这是解释当前场景的示例代码,注意:示例代码取自here

基础 Activity

public class BaseActivity extends AppCompatActivity {

protected void onCreate(Bundle savedInstanceState, int layout) {
super.onCreate(savedInstanceState);
super.setContentView(layout);
ButterKnife.bind(this);
}


@Override
public void setContentView(int layoutResID) {

//I added my own implementation here

}
}

子 Activity

public class SplashActivity extends BaseActivity {

@BindView(R.id.txtName)
TextView txtName;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);

}
}

上述场景产生了很多错误,例如无法找到具有该id的view,

经过大量研究,我发现了很多讨论相同主题的话题,

Link 1

Link 2

Link 3

Link 4

所以在浏览完所有链接后,我尝试了以下组合,但没有一个有效

  1. 在 BaseActivity 但不在 SplashActivity 中调用 ButterKnife.bind(this)
  2. 在两个 Activity 中调用 ButterKnife.bind(this)
  3. SplashActivity 中调用 ButterKnife.bind(this),使用这种组合我无法访问 BaseActivity 的 View 项,因为它们原来是空的。

我的问题如何绑定(bind) BaseActivitySplashActivity View 项?

准确的错误行

Caused by: java.lang.IllegalStateException: Required view '' with ID 2131296567 for field '' was not found. If this view is optional add '@Nullable' (fields) or '@Optional' (methods) annotation.

请注意, View 存在于布局中。

编辑 1:

我添加了覆盖 setContentView();

的代码

最佳答案

很简单。

将您的抽象 BaseActivity 作为:

public abstract class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResource());
ButterKnife.bind(this);
}

protected abstract int getLayoutResource();
}

然后简单地使用 BaseActivity 扩展您的 Activity 为:

public class SplashActivity extends BaseActivity {

@BindView(R.id. txtName)
TextView textView;

@Override
protected int getLayoutResource() {
return R.layout.activity_splash;
}
}

我更喜欢在我的项目中有多个基类。你可以有一个 BaseToolbarActivityBaseActivity 扩展为:

public abstract class BaseToolBarActivity extends BaseActivity {

protected static final int RESOURCE_NO_MENU = 0;

@BindView(R.id.toolbar)
Toolbar mToolbar;

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

public void setToolBar() {
setSupportActionBar(mToolbar);
}

protected abstract int getMenuResource();

@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (getMenuResource() == RESOURCE_NO_MENU)
return super.onCreateOptionsMenu(menu);
else {
getMenuInflater().inflate(getMenuResource(), menu);
return true;
}
}
}

因此,如果您的 Activity 有布局工具栏,则将其扩展为 BaseToolbarActivity,否则将其扩展为 BaseActivity

更多此类类(class),您可以引用我的项目

https://github.com/chintansoni202/Android-Master-Project

关于android - 如何在 Baseactivity 和子 Activity 中处理 butterknife 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48920009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com