Не удается вызвать метод объекта представления внутри действия - PullRequest
1 голос
/ 07 ноября 2010

В моей программе у меня есть пользовательский вид объекта. Внутри класса представления находится метод с именем 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 никогда не запускается. Что здесь за дело?

Заранее всем спасибо.

Редактировать: по запросу, полный просмотр

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 Ответ

0 голосов
/ 07 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...