2015-01-21 3 views
1

Я пробовал так много способов показать Toast, что я хочу (в классе DrawView), что я действительно не знаю, куда бежать больше.Toast not shows - Android

Видимо, это действительно просто, но я чего-то не хватает. Я видел другие связанные должности, но не имел успеха.

Любые идеи, пожалуйста?

import android.app.Activity; 
import android.os.Bundle; 


public class MyActivity extends Activity{ 

    DrawView drawView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     drawView = new DrawView(this); 
     setContentView(drawView); 

    } 

} 

DrawView Класс:

import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 

import android.view.MotionEvent; 
import android.view.View; 
import android.widget.Toast; 


public class DrawView extends View implements View.OnTouchListener{ 

    Paint paint = new Paint(); 

    public DrawView(MyActivity myActivity) { 
     super(myActivity); 

     setBackgroundColor(Color.WHITE); 
     paint.setColor(Color.BLACK); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     canvas.drawText("I'm text in a canvas!", 10, 10, paint); 

    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     if(event.getAction() == MotionEvent.ACTION_DOWN){ 

      Toast.makeText(getContext(),"I'm a Toast!",Toast.LENGTH_SHORT).show(); 

     } 

     return false; 

    } 

} 
+0

Посмотрите на это [ссылка] (http://stackoverflow.com/questions/1026 973/Android-Что-разностный-между-з-различных-методы-в-получить-A-контекстные/13945633 # 13945633). – ChuongPham

ответ

4
public class DrawView extends View { 

Paint paint = new Paint(); 
private Context context; 

public DrawView(MainActivity context) { 
    super(context); 
    this.context = context; 
    setBackgroundColor(Color.WHITE); 
    paint.setColor(Color.BLACK); 
} 

@Override 
protected void onDraw(Canvas canvas) { 

    canvas.drawText("I'm text in a canvas!", 10, 10, paint); 

} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    if (event.getAction() == MotionEvent.ACTION_DOWN) { 

     Toast.makeText(context, "I'm a Toast!", Toast.LENGTH_SHORT).show(); 

    } 

    return false; 

}} 
+0

Пробовали это. Нет успеха. –

+0

Отметьте обновленное сообщение. – Dardan

+0

Это будет работать отлично; – Dardan

0

Вы можете попробовать изменить свой код от:

Toast.makeText(getContext(),"I'm a Toast!",Toast.LENGTH_SHORT).show();

к:

Toast.makeText(getApplicationContext(),"I'm a Toast!",Toast.LENGTH_SHORT).show();

+0

Это дает мне ошибку: «Невозможно разрешить метод getApplicationContext()» « –

+1

Это не подходит GetApplicationContext(). http://stackoverflow.com/a/7298955/72357 – gsueagle2008

+0

Вы можете попробовать Toast.makeText('your activity'.this,"I'm a Toast!",Toast.LENGTH_SHORT).show();

1

Изменить код следующим образом ..

Context _context; 
public DrawView(MyActivity myActivity,Context context) { 
     super(myActivity); 

     _context=context; 
     setBackgroundColor(Color.WHITE); 
     paint.setColor(Color.BLACK); 

    } 

и показать Toast с помощью _context

Toast.makeText(_context,"I'm a Toast!",Toast.LENGTH_SHORT).show(); 

Пропускают ток Context также в качестве аргумента в классе ..

+0

Отлично, спасибо. Хорошо работает –

+0

С удовольствием помогите .. :) :) – Lal

1

тоста не apper не является проблемой, связанной с контекстом, с которой она связана с проблемой события касания. Вы должны изменить свой DrawView класса как этого

public class DrawView extends View { 

Paint paint = new Paint(); 
Context _MyActivity; 

public DrawView(Context myActivity) { 
    super(myActivity); 
    this._MyActivity = myActivity; 
    setBackgroundColor(Color.GREEN); 
    paint.setColor(Color.BLACK); 

} 

@Override 
protected void onDraw(Canvas canvas) { 

    canvas.drawText("I'm text in a canvas!", 10, 10, paint); 

} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
     switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     // do something 
     Toast.makeText(_MyActivity, "I'm a Toast!", Toast.LENGTH_SHORT) 
     .show(); 
     break; 
    case MotionEvent.ACTION_MOVE: 
     // do something 
     break; 
    case MotionEvent.ACTION_UP: 
     //do something 
     break; 
} 
return true; 
} 



} 

и вашего вашего класса активности как этого

public class MyActivity extends Activity implements OnTouchListener { 

DrawView drawView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    drawView = new DrawView(this); 
     setContentView(drawView); 
     drawView.setOnTouchListener(this); 
} 



@Override 
public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    return false; 
} 

} 

Вы не хотите осуществлять OnTouchListener в DrawView.class

Надеется, что это поможет вы