android 给 edittext 加 onkeylistener 删除键就没有效果了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 给 edittext 加 onkeylistener 删除键就没有效果了相关的知识,希望对你有一定的参考价值。
android 给 edittext 加 onkeylistener 删除键就没有效果了
updateEditText.setOnKeyListener(new OnKeyListener()
public boolean onKey(View v, int keyCode, KeyEvent event)
if(keyCode == KeyEvent.KEYCODE_DEL)
Log.d("keyCode", "6666666666666666666666666666666");
editText.requestFocus();
return true;
);
Log 能打的出来,但是删除不了editview里的内容。
怎么回事?
如果监听其它按键,删除键同样没效果!
public boolean onKey(View v, int keyCode, KeyEvent event)
if(keyCode == KeyEvent.KEYCODE_DEL)
Log.d("keyCode", "6666666666666666666666666666666");
editText.requestFocus();
return false;
);
关键是这个boolean类型的返回值决定后面的时间处理,返回false应该可以解决问题 参考技术A 不应该在按键上做监听事件,你把所有的按键监听都给拦在了这里,自然会这样了。追问
那该怎么监听呢
追答文本监听(addTextChangedListener)
你试试这个监听吧 或者,单击或触摸监听也可以。
如何将editText值传递给viewModel和Livedata(Kotlin)
我正在研究Android + Kotlin并做一个简单的例子来展示LiveData + ViewModel。这很简单:我有一个根活动和两个片段。 FragmentOne有两个editText。这些值相加,我需要将结果传递给ViewModel。然后,我在根活动和FragmentTwo中使用observe来查看更改的数据。
FragmentOne
class FragmentOne: Fragment() {
private val model by lazy { ViewModelProviders.of(activity).get(MyViewModel::class.java) }
var resultSum:Int = 0
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater?.inflate(R.layout.fragment_one,container,false)
val btn = view?.findViewById<Button>(R.id.sendToModel)
btn?.setOnClickListener({
val field1 = n1.text.toString().toInt()
val field2 = n2.text.toString().toInt()
resultSum = field1 + field2
model.update()
})
return view
}
}
视图模型
class MyViewModel: ViewModel() {
private val fragment by lazy {FragmentOne()}
private var _result = MutableLiveData<Int>().apply { value = 0 }
val result: LiveData<Int>
get() = _result
fun update(){
_result.value = fragment.resultSum
}
}
观察者根活动
private val resultModel by lazy {ViewModelProviders.of(this).get(MyViewModel::class.java)}
resultModel.result.observe(this, Observer { result -> resultTxt.text = result.toString()})
Observer FragmentTwo
private val resultModel by lazy {ViewModelProviders.of(activity).get(MyViewModel::class.java)}
resultModel.result.observe(this, Observer { result -> resultTxt.text = result.toString()})
我检查了var resultSum
(Log)并且它保存了总和的Int值。观察者也在工作(如果我在ViewModel中实例化result.value
,则值可观察到活动和片段)
我感谢任何帮助。
ViewModel不应该对Android。*库有任何引用。因此,您对FragmentOne的引用是一种不好的做法。
更简洁的方法是更改update()
函数以接受字符串 -
fun update(result: String){
_result.value = result
}
并更改您的FragmentOne代码说 -
btn?.setOnClickListener({
val field1 = n1.text.toString().toInt()
val field2 = n2.text.toString().toInt()
resultSum = field1 + field2
model.update(resultSum)
})
以上是关于android 给 edittext 加 onkeylistener 删除键就没有效果了的主要内容,如果未能解决你的问题,请参考以下文章