API_node_android
把module用到的API做一个总结吧
1、软键盘
Handle keyboard input |Android Developers
调出软键盘
AddWordFragment
fun showSoftKeyboard(view: View) {
if (view.requestFocus()) {
val imm = activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}
}
edEnglish.requestFocus()
showSoftKeyboard(edEnglish)
隐藏软键盘
WordFragment
fun hideSoftKeyboard(){
val imm =requireActivity()?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view?.windowToken, 0)
}
override fun onResume() {
super.onResume()
hideSoftKeyboard()
}
2、监听editText文本改变
实现效果: 当输入了单词中文和英文单词, 提交按钮设为可用
AddWordFragment
val textWatcher:TextWatcher = object :TextWatcher{
override fun afterTextChanged(s: Editable?) {
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
val english = edEnglish.text.toString().trim()
val chinese = edChinese.text.toString().trim()
floatActionButtonAdd.isEnabled = !english.isEmpty() && !chinese.isEmpty()
}
}
edEnglish.addTextChangedListener(textWatcher)
edChinese.addTextChangedListener(textWatcher)
}
3、ActionBar回退键
设置导航后Action bar显示向上箭头
WordFragment
private fun initEvent() {
val navController = findNavController()
NavigationUI.setupActionBarWithNavController(activity as AppCompatActivity, navController)
...
}
回退键事件监听
MainActivity
override fun onSupportNavigateUp(): Boolean {
return Navigation.findNavController(findViewById(R.id.nav_word)).navigateUp() or super.onSupportNavigateUp()
}
4、手机自带的回退键的导航出栈
MainActivity
override fun onBackPressed() {
super.onBackPressed()
Navigation.findNavController(findViewById(R.id.nav_word)).navigateUp()
}
5、OptionMenu中searchView的文本监听
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
val viewItemWord = inflater.inflate(R.menu.menu_word, menu)
val searchManager = requireActivity().getSystemService(Context.SEARCH_SERVICE) as SearchManager
(menu.findItem(R.id.search_word_menu).actionView as SearchView).apply {
maxWidth = 800
setOnQueryTextListener(object: SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
newText?.run{
words?.removeObservers(viewLifecycleOwner)
words = wordViewModel.getSearchWords(newText)
words?.observe(viewLifecycleOwner) { list ->
wordAdapter.submitList(list)
}
}
return true
}
})
}
}
6、RecyclerView的序号问题处理
WordFragment
private fun initRecyclerView() {
wordAdapter = WordAdapter(wordViewModel)
rv?.run{
adapter = wordAdapter
layoutManager = LinearLayoutManager(requireActivity())
itemAnimator = object : DefaultItemAnimator() {
override fun onAnimationFinished(viewHolder: RecyclerView.ViewHolder) {
super.onAnimationFinished(viewHolder)
val linnerLayoutManager: LinearLayoutManager = rv?.layoutManager as LinearLayoutManager
val first: Int = linnerLayoutManager.findFirstVisibleItemPosition()
val last: Int = linnerLayoutManager.findLastVisibleItemPosition()
for(i in first..last){
val holder = rv?.findViewHolderForAdapterPosition(i) as? WordAdapter.WordViewHolder
holder?.let{ it.tvId.text = (i+1).toString()}
}
}
}
}
7、RecyclerView删除列表的某一项
WordFragment
object: ItemTouchHelper(object: ItemTouchHelper.SimpleCallback(0,( ItemTouchHelper.START or ItemTouchHelper.END)) {
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val wordItemDelete: WordEntity? = words?.value?.get(viewHolder.adapterPosition)
wordItemDelete?.run{
wordViewModel.deleteWords(this)
}
Snackbar.make(binding.rvWordfragmentContent, "您删除了一条数据", Snackbar.LENGTH_SHORT)
.setAction("撤销") { v ->
wordViewModel.insertWords(wordItemDelete!!)
}.show()
}
}){}.attachToRecyclerView(rv)
删除数据后的撤销处理
Snackbar.make(binding.rvWordfragmentContent, "您删除了一条数据", Snackbar.LENGTH_SHORT)
.setAction("撤销") { v -> wordViewModel.insertWords(wordItemDelete!!)
}.show()
8、SwitchView开关打开和关闭的监听
WordAdapter
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WordViewHolder {
val inflater: LayoutInflater = LayoutInflater.from(parent.context)
val binding:WordItemContentBinding = DataBindingUtil.inflate(inflater, R.layout.word_item_content, parent, false)
val holder:WordViewHolder = WordViewHolder(binding)
holder.cartView.setOnClickListener(){ v ->
val uri: Uri = Uri.parse("https://fanyi.baidu.com/?aldtype=85#zh/en/${holder.tvEnglish.text}")
val intent = Intent(Intent.ACTION_VIEW, uri)
holder.cartView.context.startActivity(intent)
}
holder.switchHideChinese.setOnCheckedChangeListener(){switchView, isChecked->
val word: WordEntity = holder.cartView.getTag(R.id.id_holder_word_for_view) as WordEntity
if(isChecked){
holder.tvChinese.visibility = View.GONE
word?.isHideChineseMean = true
word?.run{
wordViewModel.updateWords(this)
}
}else{
holder.tvChinese.visibility = View.VISIBLE
word?.isHideChineseMean = false
word?.run{
wordViewModel.updateWords(this)
}
}
}
return holder
9、RecyclerView viewHolder下的控件不重复监听的优化技巧 原理:View.setTag View.getTag
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WordViewHolder {
val inflater: LayoutInflater = LayoutInflater.from(parent.context)
val binding:WordItemContentBinding = DataBindingUtil.inflate(inflater, R.layout.word_item_content, parent, false)
val holder:WordViewHolder = WordViewHolder(binding)
holder.cartView.setOnClickListener(){ v ->
val uri: Uri = Uri.parse("https://fanyi.baidu.com/?aldtype=85#zh/en/${holder.tvEnglish.text}")
val intent = Intent(Intent.ACTION_VIEW, uri)
holder.cartView.context.startActivity(intent)
}
holder.switchHideChinese.setOnCheckedChangeListener(){switchView, isChecked->
val word: WordEntity = holder.cartView.getTag(R.id.id_holder_word_for_view) as WordEntity
if(isChecked){
holder.tvChinese.visibility = View.GONE
word?.isHideChineseMean = true
word?.run{
wordViewModel.updateWords(this)
}
}else{
holder.tvChinese.visibility = View.VISIBLE
word?.isHideChineseMean = false
word?.run{
wordViewModel.updateWords(this)
}
}
}
return holder
}
override fun onBindViewHolder(holder: WordViewHolder, position: Int) {
val word: WordEntity = getItem(position)
holder.cartView.setTag(R.id.id_holder_word_for_view, word)
...
}
|