2016-11-23 6 views
0

公式のSettingsActivityを自分のアクティビティのテンプルテットとして使用し、私のpreferenceactivityには2つの静的クラス "preferencefragment1"と "preferencefragment2"があります。メソッドfinish()を呼び出す方法PreferenceActivity全体を終了するには

Appがプリファレンスアクティビティのヘッダをクリックしている間、指定されたpreferencefragmentに切り替わります。私はKEYCODE_BACKイベントでonkeydown()メソッドのfinished()メソッドを呼び出します。ヘッダビューに戻ります。 しかし、私が望むのは、preferencefragmentビューからのmainactivityに戻って、preferencefragment1ビューの代わりにPreferenceActivity全体を終了させることです。

私はpreferenceActivityを使用してBluetooth通信デバイスのパラメータを設定し、パラメータが設定を完了した後、すぐにonActivityResult()メソッドのパラメータにパラメータを送信できます。 しかし、今度は、BACKボタンを2回クリックしてメインアクティビティに戻る必要があります。ヘッダービューをスキップして、preferencefragmentビューに直接ジャンプすることは可能ですか? program flow

import android.annotation.TargetApi; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.os.Build; 
import android.os.Bundle; 
import android.preference.EditTextPreference; 
import android.preference.ListPreference; 
import android.preference.Preference; 
import android.preference.PreferenceActivity; 
import android.app.ActionBar; 
import android.preference.PreferenceFragment; 
import android.preference.PreferenceManager; 
import android.preference.SwitchPreference; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.MenuItem; 
import java.util.List; 
public class SettingsActivity extends PreferenceActivity { 
    private static List<Header> headers; 
    private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { 
     @Override 
     public boolean onPreferenceChange(Preference preference, Object value) { 
      String stringValue = value.toString(); 
      if (preference instanceof ListPreference) { 
       ListPreference listPreference = (ListPreference) preference; 
       int index = listPreference.findIndexOfValue(stringValue); 
       preference.setSummary(
         index >= 0 
           ? listPreference.getEntries()[index] 
           : null); 
      } 
      if (preference instanceof EditTextPreference) { 
       EditTextPreference editTextPreference = (EditTextPreference) preference; 
       editTextPreference.setSummary(stringValue); 
      } 
      if (preference instanceof SwitchPreference) { 
       SwitchPreference switchPreference = (SwitchPreference) preference; 
       switchPreference.setSummary(stringValue); 
      } 
      return true; 
     } 
    }; 

    private static boolean isXLargeTablet(Context context) { 
     return (context.getResources().getConfiguration().screenLayout 
       & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; 
    } 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("Confirm to update system paras?"); 
      builder.setPositiveButton("YES", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        setResult(RESULT_OK); 
        finish(); 

       } 
      }); 
      builder.setNegativeButton("CANCELED", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        finish(); 
       } 
      }); 
      builder.show(); 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
    @Override 
    protected void onActivityResult (int requestCode, int resultCode, Intent data) 
    { 
     System.out.print(resultCode); 
    } 

    private static void bindPreferenceSummaryToValue(Preference preference) { 
     // Set the listener to watch for value changes. 
     preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); 
     // Trigger the listener immediately with the preference's 
     // current value. 
     sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, 
       PreferenceManager 
         .getDefaultSharedPreferences(preference.getContext()) 
         .getString(preference.getKey(), "")); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // addPreferencesFromResource(R.xml.pref_system); 
     setupActionBar(); 
    } 

    private void setupActionBar() { 
     ActionBar actionBar = getActionBar(); 
     if (actionBar != null) { 
      // Show the Up button in the action bar. 
      // actionBar.setDisplayHomeAsUpEnabled(true); 
     } 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    @Override 
    public boolean onIsMultiPane() { 
     return isXLargeTablet(this); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    @Override 
    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public void onBuildHeaders(List<Header> target) { 
     loadHeadersFromResource(R.xml.pref_headers, target); 
     headers=target; 
    } 

    /** 
    * This method stops fragment injection in malicious applications. 
    * Make sure to deny any unknown fragments here. 
    */ 
    protected boolean isValidFragment(String fragmentName) { 
     return PreferenceFragment.class.getName().equals(fragmentName) 
       || SystemPreferenceFragment.class.getName().equals(fragmentName); 

    } 

    /** 
    * This fragment shows general preferences only. It is used when the 
    * activity is showing a two-pane settings UI. 
    */ 
    public static class SystemPreferenceFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.pref_system); 
      setHasOptionsMenu(true); 
      bindPreferenceSummaryToValue(findPreference("pref_key_ip")); 
      bindPreferenceSummaryToValue(findPreference("pref_key_port")); 
      bindPreferenceSummaryToValue(findPreference("pref_key_output1_level")); 
      bindPreferenceSummaryToValue(findPreference("pref_key_output2_level")); 
      bindPreferenceSummaryToValue(findPreference("pref_key_output3_level")); 
      bindPreferenceSummaryToValue(findPreference("pref_key_noportrait")); 
      bindPreferenceSummaryToValue(findPreference("pref_key_closeeye")); 
      bindPreferenceSummaryToValue(findPreference("pref_key_yawn")); 
      bindPreferenceSummaryToValue(findPreference("pref_key_distract")); 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      int id = item.getItemId(); 
      if (id == android.R.id.home) { 
       startActivity(new Intent(getActivity(), SettingsActivity.class)); 
       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 
    } 

     /* 
     @Override 
     public void onStop() 
     { 
      super.onStop(); 
      AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity()); 
      builder.setTitle("Confirm to update system paras?"); 
      builder.setPositiveButton("YES", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        SystemPreferenceFragment.this.getActivity().setResult(RESULT_OK); 
       } 
      }); 
      builder.setNegativeButton("CANCELED", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        SystemPreferenceFragment.this.getActivity().setResult(RESULT_CANCELED); 
       } 
      }); 
      builder.show(); 
      this.getActivity().finish(); 
     }*/ 

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public static class RealtimePreferenceFragment extends PreferenceFragment { 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.pref_realtime); 
      setHasOptionsMenu(true); 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      int id = item.getItemId(); 
      if (id == android.R.id.home) { 
       startActivity(new Intent(getActivity(), SettingsActivity.class)); 
       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 
    } 
} 

答えて

0

使用getActivity().finish();バック通知する断片から活動へのインタフェースを使用してメソッドを公開

又は

アクティビティを終了する解決

+0

私は、2つのアクティビティ、表示ヘッダーのPreferenceActivity Aと設定ページの表示のためのPreferenceActivity Bがあると思います。最初のBは、preferenceActivityではなく、Aに切り替わります.Fragment B – SNOWA

+0

フローを理解できません。 – SaravInfern

+0

アクティビティのフローダイアグラムを作成できます。右、フロー画像https://i.stack.imgur.com/ZnHe3が追加されました。 .png – SNOWA

0

問題を押されています!

ステップ1:MainActivityで、フラグ "FLAG_ACTIVITY_NO_HISTORY"をインテントに追加し、次にSettingsActivityを開始します。

ステップ2:フラグFLAG_ACTIVITY_FORWARD_RESULTを追加するために、SettingsActivity(PreferenceActivity)のonBuildStartFragmentIntent()メソッドをオーバーライドして、activityresultがMainActivityに戻ることができるようにします。

Like below: @Override 

public Intent onBuildStartFragmentIntent (String fragmentName, 
             Bundle args, 
             int titleRes, 
             int shortTitleRes) 
    { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.setClass(this, getClass()); 
     intent.putExtra(EXTRA_SHOW_FRAGMENT, fragmentName); 
     intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args); 
     intent.putExtra(EXTRA_SHOW_FRAGMENT_TITLE, titleRes); 
     intent.putExtra(EXTRA_SHOW_FRAGMENT_SHORT_TITLE, shortTitleRes); 
     intent.putExtra(EXTRA_NO_HEADERS, true); 
     intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);//the new statement 
     return intent; 
    } 
関連する問題