У меня есть пользовательский вид, расширяющий RelativeLayout (может быть любая другая группа представлений). В этом представлении у меня есть несколько framelayouts, добавленных с addView(). Для этого представления XML не существует! Конструктор представлений добавляет все из кода. Я хочу использовать это пользовательское представление как любое другое представление контента для активности. У меня есть этот фрагмент деятельности: MyView myview;поставка пользовательского вида для setContentView не работает?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myview = new MyView(this);
myview.getSomeContainedFrameLayoutOfView().setId(12345);
setContentView(myview);
}
Тогда я делаю это в onResume
@Override
protected void onResume() {
super.onResume();
View u = findViewById(12345); // test, returns null
u = myview.findViewById(12345); // test, also null
SomeFragment f = new SomeFragment();
FragmentManager m = getSupportFragmentManager();
FragmentTransaction ft = m.beginTransaction();
ft.replace(12345, f); // ofcourse error (no view found for id)
ft.commit();
}
Почему findViewById
нуль? Если я изменю setContentView()
линии до setContentView(R.layout.myframelayouts);
Все работает. Так почему-то я подозреваю setId(12345)
делает что-то отличное от: android:id="@+id/someid"
Что мне не хватает?
Я думаю, что XML компилируется в код в приложении, а код запускается во время выполнения. Кажется, вам не хватает компиляционного бита. –
, если вы попытаетесь сделать это, я бы рекомендовал создать [Id Resource] (http://developer.android.com/guide/topics/resources/more-resources.html#Id) и использовать это как идентификатор будет создан для вас во время компиляции, тогда вы просто передадите идентификационное имя, а не число. – Eluvatar