1

こんにちは、のフォント スタイルを変更しようとしていTextViewます。次のコードを使用する前に、変更方法を知っています。

public class Main_Activity extends ListActivity {
    Typeface myNewFace = Typeface.createFromAsset(getAssets(),
            "fonts/bediz__.ttf");
    private CustomListAdapter adap;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    adap = new CustomListAdapter(this);
    setListAdapter(adap);
}
    public static class CustomListAdapter extends BaseAdapter implements
        Filterable {
           public View getView(final int position, View convertView,
            ViewGroup parent) {
        textView.setText(prayers[position]);
        holder.textLine.setTypeface(myNewFace);
           }
}

必要がないのでスキップしたコードの一部、ちなみにアクセスmyNewFaceするgetView()と作成するように求められ、このようstaticに作成するとstatic

static Typeface myNewFace = Typeface.createFromAsset(getAssets(),"fonts/bediz__.ttf");

次のエラーが表示されます

Cannot make a static reference to the non-static method getAssets() from the type ContextWrapper

どうすればいいのかわかりません。以前にこの作業を数回行ったことがありますが、なぜ機能しないのかわかりません。

4

2 に答える 2

2

あなたはこれをしなければなりません

static Typeface myNewFace = Typeface.createFromAsset(context.getAssets(),"fonts/bediz__.ttf"); 

context は、アダプターを呼び出すクラスのコンテキストである必要があります。

于 2012-06-19T16:00:03.537 に答える
1

これは、最上位のネストされたクラスを作成し、メンバーではなくなったと宣言したためです。inner classそのstatic;ためinner class、最初にインスタンス化されたオブジェクトへの参照を通過しないと、nested class;いずれにもアクセスできなくなります。non-static memberouter class

の場合、外側のオブジェクトへの (隠された) 参照は、 forが作成さnon-static inner classれるときに常に渡されます。したがって、アウターのすべてのメンバーにアクセスできます。の場合、この参照は渡されません。objectinner classobject/classstatic inner class

サンプルに関しては、新しい CustomListAdapter オブジェクトを作成するときに明示的に渡す外部オブジェクトへの参照を使用できます: " adap = new CustomListAdapter(this);" しかし、より良い解決策はおそらく、この静的キーワードを内部クラス定義から削除することです。外側のオブジェクトへの参照を渡す必要もなくなりました。

于 2012-06-19T17:04:17.427 に答える