情况
我有一个BaseActivity,我可以从中扩展其他活动。在 BaseActivity 中,我有一个findCastedViewById
,它基本上会转换视图,然后返回它。
我之所以这样做,是因为我个人认为它总是难以投射出来。
问题
我想知道是否有任何问题或缺点,我可以通过使用此方法获得任何其他使用此方法的方法。
这是BaseActivity:
public class BaseActivity extends Activity{
//Other stuff
private <E extends View> E findCastedViewById(int id){
return (E) findViewById(id);
}
//Other stuff
}
答案 0 :(得分:3)
考虑使用 ButterKnife ,它解决了必须持续投射您的观点的问题,并为您节省了大量时间
一旦你去 butterknife ,就没有办法了回来
基本上,您使用
注释View变量@FindView 注释,当 ButterKnife.bind(this)被调用时,它会为您找到正确的视图
这里有一小段代码,其中ButterKnife来自GitHub页面
class ExampleActivity extends Activity {
@FindView(R.id.user) EditText username;
@FindView(R.id.pass) EditText password;
@OnClick(R.id.submit) void submit() {
// TODO call server...
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}
您可以在here
中详细了解 ButterKnife答案 1 :(得分:2)
正如lukaspp已经指出的那样,在SDK 26+中,不需要进行vew投射。
他们已经实现了与问题中相同的代码,只是现在是默认的findViewById()
。是的,OP,您的代码很好!
答案 2 :(得分:1)
正如此answer中所述,如果您compileSdk
至少是API 26,则不再需要投放视图。
答案 3 :(得分:-3)
这不仅是丑陋的,而且如果你不断重复它也是一项昂贵的操作。
如果您确定始终需要特定的派生类,则可以自由使用它。但是,我有时会发现我只需要基类View
中的方法,例如setVisibility()
,在这种情况下,铸造将是一种浪费。