2015-09-21 7 views
3

У меня есть проблема с задней кнопки в панели действий, чтобы фрагментироватьActionBarActivity кнопку назад фрагментировать

мой фрагмент кода:

public class Server extends Fragment { 
View view; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.activity_server, container, false); 
    Button server = (Button) view.findViewById(R.id.status); 

    /** Button Check Status Server **/ 
    server.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      Intent myIntent = new Intent(view.getContext(), ServerStatus.class); 
      startActivityForResult(myIntent, 0); 
      getActivity().finish(); 
     } 
    }); 
    return view; 
} 
} 

мой код в деятельности:

public class ServerStatus extends ActionBarActivity { 

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

Мой код в Фрагмент

@Override 
public void onNavigationDrawerItemSelected(int position) { 
    Fragment objFragment = null; 
    switch (position) { 
     case 0: 
      objFragment = new Account(); 
      break; 
     case 1: 
      objFragment = new AllNews(); 
      break; 
     case 2: 
      objFragment = new Server(); 
      break; 
     case 3: 
      objFragment = new Account(); 
      break; 
     case 4: 
      objFragment = new Account(); 
      break; 
     case 5: 
      objFragment = new Account(); 
      break; 
     case 6: 
      objFragment = new About(); 
      break; 
    } 
    // update the main content by replacing fragments 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction() 
      .replace(R.id.container,objFragment) 
      .commit(); 
} 

Каждый раз, когда я нажимаю кнопку «Назад», программа всегда закрывается. Я уже пытался использовать:

getActionBar().setDisplayHomeAsUpEnabled(true); 

и это:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
switch (item.getItemId()) { 
// Respond to the action bar's Up/Home button 
case android.R.id.home: 
    NavUtils.navigateUpFromSameTask(this); 
    return true; 
} 
return super.onOptionsItemSelected(item); 
} 

Может кто-нибудь помочь мне исправить мою программу?

+0

Как вы показываете свой фрагмент? Вы добавляете его в «backstack»? – hoomi

+0

Я не знаю, как его добавить –

ответ

1

EDIT: Относительно перекрестной навигации-навигации, вы не должны использовать startActivityForResult() таким образом. Вместо этого попробуйте использовать startActivity(). Если вы запускаете действие для результата, вызывающая операция ожидает обратного вызова onActivityResult() и не должна быть завершена.

В файле манифеста вы должны объявить активность фрагмента как родительскую активность ServerStatus, чтобы включить обратную навигацию. Вам не нужны NavUtils.

Если вы хотите включить фрагмент навигации в деятельности, вы должны добавить свои фрагментарные сделки с backstack: getFragmentManager().beginTransaction().addToBackStack(null).replace(...).commit();

Затем вы должны вызвать getFragmentManager().popBackStack() в onOptionsItemSelected() для того, чтобы вернуться навигации для действия бар:

@override 
public boolean onOptionsItemSelected(MenuItem item) { 
switch (item.getItemId()) { 
// Respond to the action bar's Up/Home button 
case android.R.id.home: 
    getFragmentManager().popBackStack(); 
    return true; 
} 
return super.onOptionsItemSelected(item); 
} 

Вы, возможно, придется переопределить onBackPressed() для того, чтобы вернуться навигации для обратной кнопки:

@override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() >= 1) { 
     getFragmentManager().popBackStack(); // return to previous fragment 
    } 
    else { 
     super.onBackPressed(); // Exit application when no fragment is on the backstack 
    } 
} 
+0

где я добавляю код getFragmentManager(). BeginTransaction(). AddToBackStack (null) .replace (...). Commit(); ? –

+0

см. Мое редактирование в фрагменте кода –

+0

Добавьте его здесь: // обновите основной контент, заменив фрагменты FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction(). AddToBackStack (null) .replace (R.id.container, objFragment) .commit(); 'Я также редактировал свое сообщение. – Mike76

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