Sam*_*uel 1 android listener kotlin
如何设置接口侦听器以检测Kotlin中的变量更改。我成功用Java实现了以下内容,但是在Kotlin中遇到了问题:
接口:
public interface InterfaceRefreshList
{
public void refreshListRequest();
}
Run Code Online (Sandbox Code Playgroud)
包含侦听器的类:
public class SignalChange
{
private static boolean refreshListSwitch;
private static List<InterfaceRefreshList> refreshListListeners = new ArrayList<>();
public static void setRefreshList(boolean value)
{
refreshListSwitch = value;
for(InterfaceRefreshList l : refreshListListeners)
l.refreshListRequest();
}
public static void addRefreshListListener(InterfaceRefreshList l)
{
refreshListListeners.add(l);
}
}
Run Code Online (Sandbox Code Playgroud)
侦听器正在侦听的类:
public class FragmentBrowse extends Fragment
{
public FragmentBrowse() /// Constructor
{
SignalChange.addRefreshListListener(() -> refreshList());
}
refreshList()
{
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
发出变更信号:
SignalChange.setRefreshList(true);
Run Code Online (Sandbox Code Playgroud)
我可以设置接口和信号类:
class SignalChange
{
private var refreshListSwitch: Boolean = false
var setSwitch: Boolean
get() = refreshListSwitch
set(value)
{
refreshListSwitch = value
}
private var refreshListListeners = ArrayList<InterfaceRefreshPersonsList>()
fun sendRefreshSignal()
{
for(l in refreshListListeners) l.refreshPersonsList()
}
fun addRefreshListListener(l: InterfaceRefreshPersonsList)
{
refreshListListeners.add(l)
}
}
Run Code Online (Sandbox Code Playgroud)
但是我无法在FragmentBrowse类中设置侦听器。片段类不允许构造函数。
您可以使用内置的Kotlin委托,例如:
object SignalChange {
var refreshListListeners = ArrayList<InterfaceRefreshList>()
// fires off every time value of the property changes
var property1: String by Delegates.observable("initial value") { property, oldValue, newValue ->
// do your stuff here
refreshListListeners.forEach {
it.refreshListRequest()
}
}
}
interface InterfaceRefreshList {
fun refreshListRequest()
}
Run Code Online (Sandbox Code Playgroud)
像这样添加侦听器:
SignalChange.refreshListListeners.add(object : InterfaceRefreshList {
override fun refreshListRequest() {
refreshList()
}
})
Run Code Online (Sandbox Code Playgroud)
要么
接口的intead可以使用lambda:
object SignalChange {
var refreshListListeners = ArrayList<() -> Unit>()
// fires off every time value of the property changes
var property1: String by Delegates.observable("initial value") { property, oldValue, newValue ->
// do your stuff here
refreshListListeners.forEach {
it()
}
}
}
Run Code Online (Sandbox Code Playgroud)
要添加侦听器,只需调用:
SignalChange.refreshListListeners.add(::refreshList)
//or
SignalChange.refreshListListeners.add { refreshList() }
fun refreshList() {
}
Run Code Online (Sandbox Code Playgroud)
在KOTLIN 中监听变量的简单方法
private var myVariableName by Delegates.observable(0) { property, oldValue, newValue ->
Log.d(TAG,"New Value $newValue")
Log.d(TAG,"Old Value $oldValue")
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请阅读https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.properties/-delegates/
| 归档时间: |
|
| 查看次数: |
1694 次 |
| 最近记录: |