2010-11-07 6 views
1

В моей программе у меня есть пользовательский объект вида. Внутри класса вида используется метод foo. По какой-то причине, когда я вызываю foo из своей активности, она не срабатывает. Вот код:Невозможно вызвать метод объекта вида внутри действия

XML пользовательского зрения:

<com.company.application.MyView 
    android:id="@+id/my_view" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

Код деятельности:

public class Main extends Activity { 

    MyView mView; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = li.inflate(R.layout.main, null); 
     mView= (MyView) v.findViewById(R.id.my_view); 

     //A button to fire the method inside foo() 
     Button switchLeft = (Button) findViewById(R.id.switch_left); 
     switchLeft.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       callTest(); 
      } 
     }); 
    } 

    public void callTest() { 
     Log.w(this.getClass().getName(), "clicked left arrow"); 
     mView.foo(); 
     mView.postInvalidate(); 

    } 
} 

Наконец здесь Foo:

public void foo() { 
    mBackground = mContext.getResources().getDrawable(R.drawable.temp_canvas); 
    Log.w(this.getClass().getName(), "background set"); 
} 

Первый журнал всегда когда кнопка нажата, но второй журнал не потому, что foo никогда не срабатывает. Какая сделка здесь?

Заранее благодарен всем.

Edit: по запросу, полный вид

public class MyView extends View { 

    Drawable mBackground; 

    Context mContext; 

    public MyView (Context context) { 
     super(context); 
     mContext = context; 
     mBackground = mContext.getResources().getDrawable(R.drawable.leftarrow1); 
    } 

    public MyView (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mContext = context; 
     mBackground = mContext.getResources().getDrawable(R.drawable.leftarrow1); 
    } 

    public void foo() { 
     mBackground = mContext.getResources().getDrawable(R.drawable.temp_canvas); 
     Log.w(this.getClass().getName(), "background set"); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     Paint paint = new Paint(); 
     paint.setStyle(Paint.Style.FILL); 

     // draw a solid blue circle 
     paint.setColor(Color.BLUE); 
     canvas.drawCircle(20, 20, 15, paint); 

     // draw a test background 
     mBackground.setBounds(0, 0, 300, 400); 
     mBackground.draw(canvas); 
    } 
} 
+1

Нам нужно увидеть код MyView – Falmarri

+0

Попросите, и вы получите. Благодаря! – user432209

+0

Это может быть очевидно, но вы пробовали пройти через код с помощью отладчика? И если это невозможно, вы пытались записать в журнал перед установкой фона (но внутри foo), а также с другим уровнем журнала (например, debug или info)? –

ответ

0

После перезапуска эмулятора, Foo() теперь вызывался, он просто не установить фон правильно ... но это уже другая проблема.