我知道“接口”的概念,但是我很难理解如何在android开发中使用它们。
假设我创建了一个界面来决定是否显示进度栏-
interface ProgressBarInterface {
fun showProgressBar()
fun hideProgressBar()
}
我在单个Activity应用程序的BaseActivity / MainActivity内部实现了这一点:
class BaseActivity : AppCompatActivity() , ProgressBarInterface {
private val TAG = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun showProgressBar() {
}
override fun hideProgressBar() {
}
}
在其他活动中,我有一个按钮,当我单击它时,我想在基本活动中触发showProgressBar
:
button.setOnClickListener {
//Show progress bar
}
我如何与界面交互以触发基本活动中的功能?
答案 0 :(得分:2)
由于您已经在BaseActivity中实现了该接口,因此可以在接口方法中添加所需的操作,然后在活动的任何位置调用它们(如果要扩展的内容)将该BaseActiviy扩展到更多活动中,您将需要创建此BaseActivity抽象,然后您可以在每个活动中扩展此BaseClass并仅使用接口方法
abstract class BaseActivity : AppCompatActivity() , ProgressBarInterface {
private val TAG = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun showProgressBar() {
progressBar.visibility = View.VISIBLE
}
override fun hideProgressBar() {
progressBar.visibility = View.GONE
}
}
然后在“活动”中,您可以从BaseActivity()扩展,并仅使用在BaseActivity()中定义的接口方法来防止再次对其进行编码,您可以这样做
class FirstActivity : BaseActivity() {
...
button.setOnClickListener {
showProgressBar()
}
显示和隐藏视图的简便方法?使用扩展功能
fun View.show() {
this.visibility = View.VISIBLE
}
fun View.hide() {
this.visibility = View.GONE
}
您可以在任何类中定义扩展名,例如ViewUtils.kt
,然后调用
button.setOnClickListener {
progressBar.show()
}
或
button.setOnClickListener {
progressBar.hide()
}
答案 1 :(得分:2)
android中的接口在回调功能中非常常用。假设您要基于事件显示showProgressBar()和hideProgressBar(),因此您创建一个接受回调的类,并将事件发送到实现回调接口的Main Class。
这里是一个例子。希望它有助于更好地理解:
// The callback interface
interface MyCallback {
void callbackCall();
}
// The class that takes the callback
class Worker {
MyCallback callback;
void onEvent() {
callback.callbackCall();
}
}
// Option 1:
class Callback implements MyCallback {
void callbackCall() {
// callback code goes here
}
}
worker.callback = new Callback();
// Option 2:
worker.callback = new MyCallback() {
void callbackCall() {
// callback code goes here
}
};