Android: почему на экране ничего не появляется?

И спасибо за вашу помощь. Я пытаюсь использовать ViewAnimator, чтобы показать разные виды на экране.

Так:

  • Я создаю VievAnimator,

  • Я добавляю 2 вида (в данном случае LinearLayouts) в ViewAnimator,

  • Я устанавливаю setContentView(viewAnimator);

  • Я вызываю viewAnimator.showNext();

Но ничего не показывает на экране...

public class MainActivity extends Activity {
public DataBaseHelper db;
public EditText enter;
public TextView tv;
public ArrayList<String> listWord;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ViewAnimator viewAnimator = new  ViewAnimator(this);

    LayoutInflater inflater = (LayoutInflater)this.getSystemService
              (Context.LAYOUT_INFLATER_SERVICE);
    LinearLayout front =(LinearLayout) inflater.inflate(R.layout.front,viewAnimator );
    LinearLayout back =(LinearLayout) inflater.inflate(R.layout.back,viewAnimator );

    viewAnimator.addView(front);
    viewAnimator.addView(back);

    setContentView(viewAnimator);
    viewAnimator.showNext();

Любая помощь очень ценится!

1 ответ

Решение

Проблема в следующих строках:

LinearLayout front =(LinearLayout) inflater.inflate(R.layout.front,viewAnimator);
LinearLayout back =(LinearLayout) inflater.inflate(R.layout.back,viewAnimator);

потому что, когда вы предоставляете viewAnimator как корневое представление во время инфляции, то то же самое корневое представление возвращается, и в вашем коде, вызывающем ClassCastException так как ViewAnimator не может быть брошен в LinearLayout,

Для справки:

public View inflate (внутренний ресурс, корень ViewGroup)

параметры

идентификатор ресурса для загружаемого ресурса макета XML (например, R.layout.main_page)

root Необязательный вид, который будет родительским для сгенерированной иерархии.

Возвращает

Корень Вид завышенной иерархии. Если был указан root, то это корневой вид; в противном случае это корень завышенного XML-файла.

Просто предоставьте null в качестве корневого представления, и все будет работать нормально. Например:

LinearLayout front = (LinearLayout) inflater.inflate(R.layout.front, null);
LinearLayout back = (LinearLayout) inflater.inflate(R.layout.back, null);
Другие вопросы по тегам