【问题标题】:Update TextView with each key press每次按键更新 TextView
【发布时间】:2011-06-24 14:17:27
【问题描述】:

我想要做的是用每个关键事件更新一个 TextView - 基本上是将 EditText 的内容复制到 TextView。由于某种原因,它不起作用。代码如下:

    View.OnKeyListener keyHandler = new OnKeyListener(){

        public boolean onKey(View v, int keyCode, KeyEvent event) {
            TextView id = (TextView)findViewById(R.id.previewEmplIdData);
            TextView fn = (TextView)findViewById(R.id.previewNameData);
            TextView ttl = (TextView)findViewById(R.id.previewTitleData);
            TextView mgr = (TextView)findViewById(R.id.previewMgrData);
            TextView loc = (TextView)findViewById(R.id.previewLocData);
            TextView strt = (TextView)findViewById(R.id.previewStartData);
            String text = "";
            EditText et;
            switch(v.getId()){
            case R.id.etFirstName:
                et = (EditText)v; // must first switch to a text field
                text = et.getText().toString();
                fn.setText(text);
                break;
            case R.id.etLastName:
                et = (EditText)v;
                text = et.getText().toString();
                break;
            case R.id.etEmplId:
                et = (EditText)v;
                text = et.getText().toString();
                id.setText(text);
                break;
            case R.id.etStartDate:
                et = (EditText)v;
                text = et.getText().toString();
                strt.setText(text);
                break;
            case R.id.etTitle:
                et = (EditText)v;
                text = et.getText().toString();
                ttl.setText(text);
                break;
            case R.id.spinnerLocation:
                break;
            case R.id.spinnerManager:
                break;
            }
            return false;
        }
    };

基本上,我在按键时切换视图 ID,然后将视图投射到 EditText。我不太确定为什么这不起作用……我一直很不走运让 switch 语句起作用。有什么帮助吗?

【问题讨论】:

  • 哪个TextView不显示文字?
  • 它们都没有显示任何东西..没有任何变化。

标签: java android view switch-statement


【解决方案1】:

你在哪里应用这个keyHandler?如果你只是创建并初始化它,但没有在任何视图中使用,它根本不会运行。

【讨论】:

  • 哦……大概就是这样。我如何将它应用于当前视图? getContext().setOnKeyListener()?
  • 如果你想将它应用到活动内容视图,最好将活动onCreate中的setContentView(R.layout.activity_layout)更改为View activityView = LayoutInflater.from(this).inflate(R.layout.activity_layout); setContentView(activityView)之类的东西,并在keyHandler创建后使用@987654327 @。但是@woodshy 的想法实际上更好:)
  • 据我记忆,你可以使用activity的onKeyDown事件来拦截虚拟键盘。但是你必须使用键码,而不是字符串。
  • 感谢您的帮助。我仍然无法正常工作。我想我会看看woodshy的解决方案。谢谢!
【解决方案2】:

OnKeyListener 不适用于软键盘。您应该实现TextWatcher 来跟踪文本更改。也看here

【讨论】:

  • 谢谢。我不知道这个。我让它工作了,当我使用软键盘时它强制关闭。
【解决方案3】:

我刚刚使用以下方法解决了同样的问题:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class InputField extends AppCompatActivity {

private EditText input;
private TextView displayString;
private String writeText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input_field);

    input = (EditText) findViewById(R.id.editText);
    displayString = (TextView) findViewById(R.id.displayStringText);

    input.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {}

        @Override
        public void afterTextChanged(Editable s) {
            writeText = input.getText().toString();
            displayString.setText(writeText);
        }
    });

  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多