Я пытаюсь узнать, как использовать фрагмент в качестве рабочего для активности андроида. У меня есть следующий простой макет XML для моей основной деятельности:Использование фрагментов в качестве рабочих для активности
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Press me" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
</LinearLayout>
Я определяю свой фрагмент, используя следующее определение класса:
public class UpdateTextFragment extends Fragment {
public static UpdateTextFragment newInstance() {
return new UpdateTextFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void startUpdateText() {
TextView textView = ((TextView) getActivity().findViewById(R.id.text));
textView.setText("I've been pressed!");
}
}
Тогда из моей основной деятельности я просто добавить фрагмент и вызовом startUpdateText
Способ фрагмента с помощью кнопки он onClickListener
, т.е.
public void onClick(View arg0) {
UpdateTextFragment fragment = UpdateTextFragment.newInstance();
getFragmentManager().beginTransaction().add(fragment, "updateText").commit();
fragment.startUpdateText();
}
код компилируется и добавления к таблетке без проблем. Я ожидаю, что он напишет текст «Я был нажат!» для текстового просмотра при нажатии кнопки, но приложение просто выходит из строя со стандартным «К сожалению приложение перестало работать». Я еще не реализовал класс, чтобы поймать это непокрытое исключение - я надеялся, что это может быть что-то очевидное, я пропал или не понимаю?
Thanx
Прежде всего, проверьте свой логарифмический файл на предмет фактических ошибок. Он должен содержать stracktrace. Во-вторых, это просто не то, как Фрагменты работают и для чего они нужны. Прежде всего, ознакомьтесь с использованием фрагментов и их целью в документации разработчика. –
Спасибо Стефан.Logcat предлагает исключение java.lang.NullPointerException. Будут исследовать дальше. Кроме того, почему бы не использовать такой фрагмент? Я не собираюсь использовать его, чтобы просто изменить текст где-то, но как рабочий для AsyncTask, чтобы он мог сохранять свое состояние между изменениями ориентации (выше это была просто попытка понять его реализацию). Документация, похоже, предполагает, что вы можете использовать фрагменты в качестве рабочих, но, пожалуйста, дайте мне знать, если я пропущу что-то важное. –
Фрагмент является повторно используемым «пользовательским элементом», размещенным внутри Activity. Цель состоит в том, чтобы некоторые части пользовательского интерфейса были повторно использованы для разных макетов. Таким образом, фрагмент имеет свой собственный вид xml и в значительной степени автономный. Он не собирается запускать для простой задачи, делать что-то на Activity и закрывать. Если вам нужны такие работники, вам лучше взглянуть на темы и службы. Ваш Nullpointer, вероятно, является «фрагментом», равным нулю, или «textview» внутри вашего фрагмента. –