Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中使用onStateChange自定义侦听器?_Java_Android_Textview_Listener_Onchange - Fatal编程技术网

Java 如何在android中使用onStateChange自定义侦听器?

Java 如何在android中使用onStateChange自定义侦听器?,java,android,textview,listener,onchange,Java,Android,Textview,Listener,Onchange,我一直在尝试实现一个onStateChange监听器,并在互联网上寻求帮助,但似乎没有什么能解决我的具体问题。我的问题是,我正在进行一次基于文本的冒险,我需要在文本框完成“打字机”样式的打印之前禁止点击。完成后,将显示一个箭头图像,您现在应该可以单击文本框来推进文本。不幸的是,由于文本逐个字符出现在特殊的TextView类中,我不确定如何将onStateChange与我的活动、特殊的TextView类以及我在示例中看到的经常推荐的第三个类一起使用。以下是我到目前为止的情况: 我已经看到很多建议,

我一直在尝试实现一个onStateChange监听器,并在互联网上寻求帮助,但似乎没有什么能解决我的具体问题。我的问题是,我正在进行一次基于文本的冒险,我需要在文本框完成“打字机”样式的打印之前禁止点击。完成后,将显示一个箭头图像,您现在应该可以单击文本框来推进文本。不幸的是,由于文本逐个字符出现在特殊的TextView类中,我不确定如何将onStateChange与我的活动、特殊的TextView类以及我在示例中看到的经常推荐的第三个类一起使用。以下是我到目前为止的情况:

我已经看到很多建议,推荐这样的课程:

public class TypewriterManager {
private TypewriterListener typewriterListener = null;

public interface TypewriterListener {
    public void onStateChange(boolean state);
}

public void registerListener (TypewriterListener listener) {
    typewriterListener = listener;
}

// -----------------------------
// the part that this class does

private boolean isTypewriterFinished = false;
public void doYourWork() {
    // do things here
    // at some point
    isTypewriterFinished = false;
    // now notify if someone is interested.
    if (typewriterListener != null)
        typewriterListener.onStateChange(isTypewriterFinished);
}
}
现在,我想我会把runnable中的onStateChange称为

public class Typewriter extends TextView {

private CharSequence mText;
private int mIndex;
private long mDelay = 500; //Default 500ms delay


public Typewriter(Context context) {
    super(context);
}

public Typewriter(Context context, AttributeSet attrs) {
    super(context, attrs);
}

private Handler mHandler = new Handler();
private Runnable characterAdder = new Runnable() {
    @Override
    public void run() {
        setText(mText.subSequence(0, mIndex++));
        if(mIndex <= mText.length()) {
            mHandler.postDelayed(characterAdder, mDelay);
        }else{
            //call listener?
        }
    }
};

}

任何帮助或反馈都将不胜感激。

将这两个课程合并在一起。除非您不在其他任何地方使用,否则您不需要任何类似TypeWriterManager的类。调用侦听器的方式与您在TypeWriterManager中所做的相同。如果要这样做,我是否应该在Typewriter中实现一个接口?在runnable中有注释的地方会调用doYourWork()吗?应该用打字机创建接口。在任何需要状态回调的地方实现它。把你的runnable换成OnStatus我很感激。明天我得设法实施它。再次感谢你的帮助。
typewriter.setOnTypewriterFinishedListener(new View.OnTypewriterFinishedListener)