1

コンテキストと名前文字列を引数として新しいスレッドに渡すにはどうすればよいですか?

コンパイルのエラー:

ライン

label = new TextView(this);

コンストラクターTextView(new Runnable(){})は未定義です

行" label.setText(name);":

別のメソッドで定義された内部クラス内の非最終変数名を参照することはできません

コード:

public void addObjectLabel (String name) {
    mLayout.post(new Runnable() {
        public void run() {
            TextView label;
            label = new TextView(this);
            label.setText(name);
            label.setWidth(label.getWidth()+100);
            label.setTextSize(20);
            label.setGravity(Gravity.BOTTOM);
            label.setBackgroundColor(Color.BLACK);
            panel.addView(label);
        }
    });
}
4

1 に答える 1

3

nameとして宣言する必要があります。そうしないと、内部の匿名クラスfinalで使用できません。

さらに、どちらを使用するかを宣言する必要がありthisます。現状では、Runnableオブジェクトのthis参照を使用しています。必要なものは次のようなものです。

public class YourClassName extends Activity { // The name of your class would obviously be here; and I assume it's an Activity
    public void addObjectLabel(final String name) { // This is where we declare "name" to be final
        mLayout.post(new Runnable() {
            public void run() {
                TextView label;
                label = new TextView(YourClassName.this); // This is the name of your class above
                label.setText(name);
                label.setWidth(label.getWidth()+100);
                label.setTextSize(20);
                label.setGravity(Gravity.BOTTOM);
                label.setBackgroundColor(Color.BLACK);
                panel.addView(label);
            }
        });
    }
}

ただし、これがUIを更新するための最良の方法かどうかはわかりません(おそらくとを使用する必要がありますrunOnUiThreadAsyncTask。しかし、上記はあなたが遭遇したエラーを修正するはずです。

于 2012-07-22T04:18:53.730 に答える