setOnClickListener无法实时响应输入问题

代码:

import android.os.Bundle;
import android.app.*;


import android.view.*;
import android.content.*;
import android.graphics.*;
import android.widget.*;


public class MainActivity extends Activity {
private TextView mTextView1;
private EditText mEditText1;

@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mTextView1 = (TextView)findViewById(R.id.output);
mEditText1 = (EditText)findViewById(R.id.input1);

mEditText1.setOnKeyListener(new EditText.OnKeyListener(){


@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
mTextView1.setText(mEditText1.getText().toString());
return false;
}

});
}

}


问题:

mTextView1 无法实时响应mEditText1 的输入,必须依赖键盘上的回车键,删除键等才能显示。


猜想:

1.程序焦点被输入法夺取;

2.与OnKeyListener本身有关。


成果1:与return值无关。


相关资料:

1.return值:http://hi.baidu.com/solohac/item/4dc61dcfb68cd30cc710b247

这段代码主要说明的是如果在EditText中按下enter,则会读取EditText中的值,并显示在TextView中。但是这个return true/fasle 却是个关键。
SDK中这样描述:
Returns
True if the listener has consumed the event, false otherwise.

则现在的逻辑变成这样:如果按下的enter,则在EditText中显示,然后返回true,截断这个enter事件。如果按下的不是enter,则返回false,继续事件应有的流程。

这段代码主要说明的是如果在EditText中按下enter,则会读取EditText中的值,并显示在TextView中。但是这个return true/fasle 却是个关键。
SDK中这样描述:
Returns
True if the listener has consumed the event, false otherwise.

则现在的逻辑变成这样:如果按下的enter,则在EditText中显示,然后返回true,截断这个enter事件。如果按下的不是enter,则返回false,继续事件应有的流程。

2.OnKeyListener: http://wenku.baidu.com/view/8f7555c84028915f804dc25f.html

onKey() 
来自View.OnKeyListener接口。当用户让焦点落在一个对象上后按下或释放设备上的一个键时,这个方法被调用。


成果2:

Register a callback to be invoked when a hardware key is pressed in this view. Key presses in software input methods will generally not trigger the methods of this listener.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的第一个问题是如何设计按钮响应代码,并将界面输入信息保存到共享文件中。以下是一个简单的示例代码: ``` public class MainActivity extends AppCompatActivity { private EditText mEditText; private SharedPreferences mSharedPreferences; private SharedPreferences.Editor mEditor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = findViewById(R.id.edit_text); mSharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE); mEditor = mSharedPreferences.edit(); Button saveButton = findViewById(R.id.save_button); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String inputText = mEditText.getText().toString(); mEditor.putString("inputText", inputText); mEditor.apply(); Toast.makeText(MainActivity.this, "Input Saved!", Toast.LENGTH_SHORT).show(); } }); } @Override protected void onStop() { super.onStop(); String inputText = mEditText.getText().toString(); mEditor.putString("inputText", inputText); mEditor.apply(); } } ``` 在这个例子中,我们首先在 `onCreate()` 方法中初始化了界面上的输入框和SharedPreferences文件。接下来,我们设置保存按钮的点击监听器,在按钮被点击后,将输入文本保存到SharedPreferences文件中,同时也弹出一个提示信息让用户知道信息已经成功保存。最后,我们重写了 `onStop()` 方法,在应用程序停止运行时自动保存输入文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值