Come implementare onBackPressed () e intenti nel frammento?

So che onBackPressed () è un metodo in attività, ma voglio utilizzare la funzionalità in frammenti in modo tale che quando viene premuto il button di return, viene reindirizzato ad un'altra attività tramite Intent. C'è qualche soluzione a questo ?

public class News_Events_fragment extends Fragment { ProgressDialog pd; ListView lv1; SharedPreferences sharedPreferences = null; int NotiCount; TextView txt_title, txt_msg, textView; Context context; Intent intent ; ArrayList<SliderMsgTitleModel> CurrentOfficersPastList; NewsActivityAdapter pastAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { context = (Context) getActivity(); View rootView = inflater.inflate(R.layout.activity_news, container, false); new AsyncTask<Void, Void, ArrayList<SliderMsgTitleModel>>() { protected void onPreExecute() { pd = new ProgressDialog(getActivity()); pd.setCancelable(true); pd.setTitle("UPOA"); pd.setMessage("Please wait,loading the data..."); pd.show(); } @Override protected ArrayList<SliderMsgTitleModel> doInBackground( Void... params) { System.out.println("In Background"); CurrentOfficersPastList = new ArrayList<SliderMsgTitleModel>(); // display view for selected nav drawer item ParseQuery<ParseObject> query = ParseQuery.getQuery("message"); query.whereEqualTo("featured_status", true); // query.whereEqualTo("push_status", true); query.orderByDescending("updatedAt"); query.selectKeys(Arrays.asList("title")); query.selectKeys(Arrays.asList("message")); try { query.setCachePolicy(ParseQuery.CachePolicy.NETWORK_ELSE_CACHE); List<ParseObject> results = query.find(); for (int i = 0; i < results.size(); i++) { ParseObject object = results.get(i); CurrentOfficersPastList.add(new SliderMsgTitleModel( object.getString("title"), object .getString("message"))); System.out.println("title is==" + object.getString("title") + "&& message is" + object.getString("message") + "size is" + CurrentOfficersPastList.size()); } } catch (Exception e) { e.getMessage(); } pd.dismiss(); return CurrentOfficersPastList; } @SuppressWarnings("unchecked") @Override protected void onPostExecute(ArrayList<SliderMsgTitleModel> value) { pd.dismiss(); /*Intent ent = new Intent(getActivity(), NewsActivity.class); ent.putExtra("NEWSLIST", (ArrayList<SliderMsgTitleModel>) value); startActivity(ent); System.out.println("Value is" + value.size());*/ CurrentOfficersPastList = new ArrayList<SliderMsgTitleModel>(); CurrentOfficersPastList = value; lv1 = (ListView) getActivity().findViewById(R.id.list_title); pastAdapter = new NewsActivityAdapter(getActivity(), R.layout.activity_news_txt, CurrentOfficersPastList); lv1.setAdapter(pastAdapter); } }.execute(); return rootView; } public void onBackPressed() { // TODO Auto-generated method stub //super.onBackPressed(); //Toast.makeText(getApplicationContext(), "click",2000).show(); String cameback="CameBack"; intent = new Intent(getActivity(),HomeActivity.class); intent.putExtra("Comingback", cameback); startActivity(intent); } } 

  • Impostazioni Daydream
  • L'emulatore Android non prende l'input della tastiera - SDK tools rev 20
  • Android Action Bar
  • Android scorri fino alla parte inferiore di una listview
  • Utilizzo di emulatore Android -dns-server
  • Android come autorizzazioni in iOS
  • Come leggere triggersmente la data in cui è stata creata la mia apk di Android?
  • OutputStreamWriter non si aggiunge
  • Errore di app di session durante l'installazione di APK
  • java.io.IOException: nessuna sfida di authentication trovata
  • Facebook Like button nell'applicazione Android
  • Android Volley - BasicNetwork.performRequest: codice di risposta imprevisto 400
  • 5 Solutions collect form web for “Come implementare onBackPressed () e intenti nel frammento?”

    Sostituire onKeyDown invece di onBackPressed. Non necessariamente . Ma questo funziona per me

     public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: String cameback="CameBack"; intent = new Intent(getActivity(),HomeActivity.class); intent.putExtra("Comingback", cameback); startActivity(intent); return true } return false; } 

    È ansible interagire con il frammento utilizzando un'interface di richiamata. Nella tua attività aggiungere quanto segue:

     public class MyActivity extends Activity { protected OnBackPressedListener onBackPressedListener; public interface OnBackPressedListener { void doBack(); } public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) { this.onBackPressedListener = onBackPressedListener; } @Override public void onBackPressed() { if (onBackPressedListener != null) onBackPressedListener.doBack(); else super.onBackPressed(); } @Override protected void onDestroy() { onBackPressedListener = null; super.onDestroy(); } } 

    Nel tuo frammento aggiungere il seguente:

     public class MyFragment extends Fragment implements MyActivity.OnBackPressedListener { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ((MyActivity) getActivity()).setOnBackPressedListener(this); } @Override public void doBack() { //BackPressed in activity will call this; } } 

    Si C'è. Dovresti implementare in questo modo.

     @Override public void onBackPressed() { if (fragment != null) //user defined onBackPressed method. Not of Fragment. fragment.onBackPressed(); } else { //this will pass BackPress event to activity. If not called, it will //prevent activity to get BackPress event. super.onBackPressed(); } } 

    Spiegazione

    1. Controllare se il vostro frammento è inizializzato o no. Se è, quindi passare indietro evento printing al tuo frammento.
    2. Se la condizione di cui sopra non è passata, basta passare indietro premere per la tua attività in modo da gestirlo.

    Nota

    Qui la condizione può essere qualsiasi cosa. Prendo solo l'initialization del fragment come esempio. Può essere che non può essere aiutato. È necessario definire la propria condizione per passare al frammento.

    Modifica

    Ho creato un'applicazione di esempio su GitHub per implementare Back Stack di frammento.

    Scarica l'applicazione Fragment Back Stack .

    È ansible implementare onKeyListener per il tuo frammento e call l'attività successiva all'interno di esso. Non ho mai provato questo. Ma spero che possa aiutare

    Per esempio

     fragmentObject.getView().setOnKeyListener( new OnKeyListener() { @Override public boolean onKey( View v, int keyCode, KeyEvent event ) { if( keyCode == KeyEvent.KEYCODE_BACK ) { //your code here } return false; } } ); 

    È necessario ignorare il metodo OnBackPressed nel frammento.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.