Привет, Я пытаюсь изменить стиль шрифта 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
к 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
Я не знаю, что делать, я делал эту работу несколько раз раньше, но теперь я не знаю, почему она не работает.
вы должны просто сделать это
static Typeface myNewFace = Typeface.createFromAsset(context.getAssets(),"fonts/bediz__.ttf");
где контекст должен быть контекстом класса, который вызывает вызов адаптера.
Это потому, что вы объявили свой inner class
static;
делая ваш inner class
верхним уровнем вложенного класса и больше не является nested class;
поэтому вы больше не можете получить какой-либо non-static member
outer class
не пройдя сначала ссылку на экземпляр объекта.
Для non-static inner class
всегда ссылается (скрытая) ссылка на внешний объект, когда создается object
для inner class
; поэтому предоставляет доступ ко всем членам внешнего object/class
. Для static inner class
эта ссылка не передается.
Что касается вашего примера, вы можете использовать ссылку на внешний объект, который вы явно передаете при создании нового объекта CustomListAdapter: " adap = new CustomListAdapter(this);
", но лучшим решением, вероятно, является удаление этого статического ключевого слова из определение внутреннего класса. Вам также не нужно будет передавать ссылку на внешний объект.
context
для работы с ним.