如何在Android中使用界面

时间:2020-07-01 13:12:17

标签: android kotlin

我知道“接口”的概念,但是我很难理解如何在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
        }

我如何与界面交互以触发基本活动中的功能?

2 个答案:

答案 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
   }
};