取消触摸吐司消息

问题描述 投票:0回答:3

我想挣钱的时候,背景是触动了我的烤面包的消息过早地消失。敬酒应该消失的时候,屏幕的每个部分都感动......我知道的方法是.cancel但我不能利用它正确..这是我的尝试:

我试图与.setontouchlistener方法,但它不工作...我在android开发新的,因此,将不胜感激有一个示例代码学习...我会告诉你我的代码,这是它:

public class MainActivity extends AppCompatActivity {
private LayoutInflater layoutInflater;
private RelativeLayout relalayout
private LinearLayout linelayout;
private ScrollView scrollayout;
public Toast toast;
private ImageView backgroundimg;

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_activitymain);
    Bundle extradata1 = getIntent().getExtras();
    String textString = extradata1.getString("ImportedData");
    TextView mytext = (TextView) findViewById(R.id.text);
    relalayout = (RelativeLayout) findViewById(R.id.relalayout);
    linelayout = (LinearLayout) findViewById(R.id.linelayout);
    scrollayout = (ScrollView) findViewById(R.id.scrolllayout);
    backgroundimg = (ImageView) findViewById(R.id.imageView2);
    toast = new Toast(this);

 if (textString.equals("firstimported")) {

        String mytxt = "";
        StringBuffer sbuffer = new StringBuffer();
        InputStream is = this.getResources().openRawResource(R.raw.firsttext);
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));


        try {

            while ((mytxt = reader.readLine()) != null) {
                sbuffer.append(mytxt + "\n");

            }

            mytext.setText(sbuffer);
            is.close();


        } catch (Exception e) {
            e.printStackTrace();
        }
        String text = sbuffer.toString();
        SpannableString ss = new SpannableString(text);

ClickableSpan clickspan1 = new ClickableSpan() {
@Override
public void onClick(View widget) {
    Toast toast = Toast.makeText(MainActivity.this, "this is the toast",
    Toast.LENGTH_SHORT);
    toast.show();}
    @Override
    public void updateDrawState(TextPaint ds) {

        super.updateDrawState(ds);
        ds.setColor(Color.WHITE);
        ds.setUnderlineText(false);}
    };

    scrollayout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        toast.cancel();
        return false;
    }
});
ss.setSpan(clickspan1, 52, 53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

mytext.setText(ss);
        mytext.setMovementMethod(LinkMovementMethod.getInstance());

}
}

public void onBackPressed() {
    Intent intent = new Intent(MainActivity.this, OtherActivity.class);
    startActivity(intent);
    finish();
}

当我触摸屏的活动崩溃..所以它只是将无法正常工作。

android android-toast
3个回答
0
投票

尝试这个

Toast toast; 
@Override
public void onClick(View widget) {
    toast = Toast.makeText(MainActivity.this, "this is the toast", Toast.LENGTH_SHORT);
    toast.show();
}
scrollayout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(toast != null)
            toast.cancel();
        return super.onTouch(v, event);
    }
});

更新应答按代码

public class MainActivity extends AppCompatActivity {
    private ScrollView scrollayout;
    public Toast toast;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activitymain);
        TextView mytext = (TextView) findViewById(R.id.text);
        scrollayout = (ScrollView) findViewById(R.id.scrolllayout);
        StringBuffer sbuffer = new StringBuffer();
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        sbuffer.append("1234567890\n");
        String text = sbuffer.toString();
        SpannableString ss = new SpannableString(text);
        ClickableSpan clickspan1 = new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                toast = Toast.makeText(MainActivity.this, "this is the toast", Toast.LENGTH_SHORT);
                toast.show();
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.WHITE);
                ds.setUnderlineText(false);
            }
        };
        scrollayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (toast != null) {
                    toast.cancel();
                    toast = null;
                }
                return false;
            }
        });
        ss.setSpan(clickspan1, 52, 53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        mytext.setText(ss);
        mytext.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

我已经改变了,你作为我没有全部资源的一些价值观,但你需要做的主要变化是在ClickSpan初始化和scrolllayout触摸事件。请对它们进行比较。我得到了与滚动以下输出敬酒已被证明之后。 enter image description here

道歉长尺寸的gif。


2
投票

您必须声明你的活动的变量Toast对象

private Toast toast;

然后初始化它在你的onClick方法:

toast = Toast.makeText(MainActivity.this, "this is the toast",Toast.LENGTH_SHORT);
toast.show();

此外,在您的onTouch你应该检查敬酒对象为空:

if(toast != null){
   toast.cancel();
}

0
投票

Toast.makeText返回敬酒的对象。调用取消()这个对象就取消它。

© www.soinside.com 2019 - 2024. All rights reserved.