【问题标题】:EditText listener not runningEditText 侦听器未运行
【发布时间】:2013-07-06 00:49:22
【问题描述】:

我正在通过从另一个布局扩展 EditText 视图来创建一个 EditText 侦听器。监听器不起作用。我试图在下面放置打印语句,但在digitText.addTextChangedListener(...) 之后没有调用它们。在它被调用之前的任何东西。我确保 id 是正确的,并且它没有得到一个空指针来夸大视图。关于它为什么不起作用的任何建议?

public void digitsListener () {

            LayoutInflater inflater = this.getLayoutInflater();
            View dialpadLayout = inflater.inflate(R.layout.dialpad, null);
            EditText digitText = (EditText)dialpadLayout.findViewById(R.id.digits);
            digitText.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    System.out.println("If this prints it works.");
                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }

                @Override
                public void afterTextChanged(Editable s) {
                }
            });
}

这是 dialpad.xml 中的 EditText 视图

<EditText
        android:id="@+id/digits"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        android:focusable="true"
        android:gravity="center"
        android:layout_weight="0.6"
        android:inputType="number"
        android:scrollHorizontally="true"
        android:textSize="40sp"/>

【问题讨论】:

  • android 中没有 System.out.print()。改用日志

标签: android android-edittext


【解决方案1】:

您的EditText 必须在屏幕上可见才能与之交互,因此您可能不需要inflaterinflater 每次扩展视图时都会返回一个新对象。因此,您正在与之交互的 EditText 与充气机返回的不同。如果您在 Activity 中,则可以通过这种方式更改代码。

public void digitsListener () {


            EditText digitText = (EditText) findViewById(R.id.digits);
            digitText.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    System.out.println("If this prints it works.");
                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }

                @Override
                public void afterTextChanged(Editable s) {
                }
            });
}

【讨论】:

  • 移除充气机后,digitText.addTextChangedListener(new TextWatcher().. 上的程序会因 NPE 而崩溃
  • 想想吧。如果 findViewById 返回 null 意味着您的 EditText 不可见,我错了吗?
  • 这是我的情况:此活动正在调用其他 4 个片段作为选项卡。我在主要活动中运行这个监听器,而不是片段之一。我应该把它放在适当的片段中吗?
  • 你必须在视图所属的地方运行sn-p。否则就没有意义
  • 是的,我只是将它放在片段中并且它可以工作。我希望在外部活动中膨胀它也能奏效。我想你必须直接在片段中拥有它
【解决方案2】:

您在 Android 上进行测试吗?然后就没有System.out.print()

您需要改用 LogCat:

Log.i("tag", "If this prints it works");
只要选择你想要的任何标签,真的没关系,你只需要它通过在logcat上方的搜索框中使用标签:(例如标签:错误)找到它

“Log.i”用于信息,“Log.w”用于警告,“Log.e”用于错误消息

如果您希望消息显示在手机上,可以使用 Toasts 代替:

Toast toast = Toast.makeText(getApplicationContext(), "If this prints it works", Toast.LENGTH_SHORT);
toast.show();

(见here

【讨论】:

  • 不,手机已插上电源,我正在查看 Eclipse 中 LogCat 上的状态
  • 什么都没改变,没有System.out.print
  • 祝酒词也没有出现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2013-10-11
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多