2015-02-10 2 views
1

Я пытаюсь закодировать просмотры с вкладками (3 вкладки). Я хочу, чтобы каждая страница была Activity. Я использую код в этом tutorial, но, к сожалению, на каждой странице есть только фрагмент.Проведите просмотры с вкладками: активность или фрагмент?

Что я пытался сделать, это преобразовать мои действия во Фрагменты (но я все равно получаю некоторое исключение NullPointerException).

Можно ли использовать Фрагмент вместо Activity (в котором я использую: AlarmManager, OnCheckedChangeListener, PackageManager, AlertDialog ...)? Есть ли лучший способ решить мою проблему?

спасибо.

================================================================================================================================== ========================

(ДОПОЛНЕНО 1)

Вот код из преобразованного фрагмента:

public class TabFragment extends Fragment implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { 

private HashMap<String, String> myMap; 
static private TextView usernameView; 
private String mUsername; 
private String permPassword; 
private SharedPreferences pref; 
private SharedPreferences prefCheckBox; 
private TextView trackTextView; 
private TextView logoutTextView; 
private TextView settingsTextView; 
private CheckBox trackCheckBox; 
boolean isTrackingEnabled; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.activity_home_profile, container, false); 

    final SessionManager session = new SessionManager(getActivity().getApplicationContext()); 
    myMap = session.getUserDetails(); 
    usernameView = (TextView) getActivity().findViewById(R.id.usernameText); 
    mUsername = myMap.get("username"); 
    usernameView.setText(""); 
    usernameView.setText(mUsername); 

    trackTextView = (TextView) view.findViewById(R.id.tracking_textView); 
    trackCheckBox = (CheckBox) view.findViewById(R.id.track_checkBox); 
    logoutTextView = (TextView) view.findViewById(R.id.log_out); 
    settingsTextView = (TextView) view.findViewById(R.id.settings); 

    prefCheckBox = getActivity().getApplicationContext().getSharedPreferences("Tracking Checkbox", 0); // 0 - for private mode 
    isTrackingEnabled = prefCheckBox.getBoolean("CheckBoxState", false); 
    // display checkbox previous state 
    trackCheckBox.setChecked(isTrackingEnabled); 

    logoutTextView.setOnClickListener(this); 
    trackTextView.setOnClickListener(this); 
    settingsTextView.setOnClickListener(this); 

    trackCheckBox.setOnCheckedChangeListener(this); 

    return view; 
} 

Я получаю NullPointerException для usernameView.setText("")

02-10 15:03:35.203 27866-27866/com.projectname E/AndroidRuntime﹕ FATAL EXCEPTION: main 

java.lang.NullPointerException 
+0

вывесить ошибку вы получаете вместе с кодом, так что мы можем понять вопрос. Также да, вы должны использовать фрагменты при использовании функций прокрутки. –

+0

@AshwinNarayanan. Проверьте мой обновленный вопрос. –

ответ

5

You не может использовать несколько действий на одной странице.

Единственный способ - фрагменты, Фрагменты строятся для поддержки этой функции.

A Fragment представляет собой поведение или часть пользовательского интерфейса в операции . Вы можете объединить несколько фрагментов в одном действии с , создать многоуровневый пользовательский интерфейс и повторно использовать фрагмент в нескольких действиях. Вы можете представить фрагмент как модульный раздел активности, который имеет свой собственный жизненный цикл, получает свои собственные входные события и которые вы можете добавлять или удалять во время выполнения действия (вроде как «вспомогательная» «что вы можете повторно использовать в разных действиях).

Преобразование активности в фрагмент очень просто

  1. В случае активности вы простирающаяся активность изменить его фрагментировать
  2. Изменить OnCreate функции onCreateView

Например:

Деятельность -

public class MainActivity extends Activity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     } 
    } 

Старинное Фрагмент -

public class MainActivity extends Fragment { 


    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

     View view=inflater.inflate(R.layout.activity_main,null); 

     return view; 
    } 
} 

Наиболее важным

Внутри деятельности, как правило, мы привыкли, чтобы найти вид из XML с помощью этого метода

TextView textView= (TextView) findViewById(R.id.helletxtview); 

Внутри фрагментов этого не будет работать, потому что findViewById не доступны в классе Fragment, но использование можно использовать с помощью корневой View, как этот

View view=inflater.inflate(R.layout.activity_main,null); 
TextView textView= (TextView) view.findViewById(R.id.helletxtview); 
+0

Пожалуйста, уточните мой обновленный вопрос. –

+0

Мне пришлось изменить usernameView = (TextView) getActivity(). FindViewById (R.id.usernameText) с usernameView = (TextView) view.findViewById (R.id.usernameText) –

Смежные вопросы