2017-01-17 5 views
-2

私はlogoutButtonの断片onclickリスナーで助けが必要です。共有環境設定をクリアしてインテントを作成したい。私はそれについて多くの質問を読んだことがありますが、私はこれを扱うことができません。私は私のアプリからの活動のようにそれを試しましたが、それは動作しません。アンドロイドスタジオの断片をハンドルで処理する

エラーがたくさんあります:私のボタンの宣言で

  • :私の共有好みの設定にする方法findViewById(int)
  • を解決できません:finish()声明で、方法getSharedPreferences(java.lang.String, int)
  • を解決できません:メソッドを解決できません。 finish()
  • 私のnew Intentコンストラクタ:コンストラクタを解決できませんIntent(de.myfirstapp.app.SettingsFragment, java.lang.Class<de.myfirstapp.app.LoginActivity>)

package de.myfirstapp.app; 
 

 
import android.content.Context; 
 
import android.content.Intent; 
 
import android.content.SharedPreferences; 
 
import android.net.Uri; 
 
import android.os.Bundle; 
 
import android.support.v4.app.Fragment; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.widget.Button; 
 
import android.widget.CalendarView; 
 
import android.widget.TextView; 
 

 
import static android.content.Context.MODE_PRIVATE; 
 

 
/** 
 
* A simple {@link Fragment} subclass. 
 
* Activities that contain this fragment must implement the 
 
* {@link SettingsFragment.OnFragmentInteractionListener} interface 
 
* to handle interaction events. 
 
* Use the {@link SettingsFragment#newInstance} factory method to 
 
* create an instance of this fragment. 
 
*/ 
 
public class SettingsFragment extends Fragment { 
 
    // TODO: Rename parameter arguments, choose names that match 
 
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
 
    private static final String ARG_PARAM1 = "param1"; 
 
    private static final String ARG_PARAM2 = "param2"; 
 

 
    // TODO: Rename and change types of parameters 
 
    private String mParam1; 
 
    private String mParam2; 
 

 
    private OnFragmentInteractionListener mListener; 
 

 
    public SettingsFragment() { 
 
     // Required empty public constructor 
 
    } 
 

 
    //Change the title in action bar 
 
    public void onResume(){ 
 
     super.onResume(); 
 
     String titleString = getResources().getString(R.string.title_activity_navigation_drawer_settings); 
 
     // Set title bar 
 
     ((NavigationDrawerActivity) getActivity()) 
 
       .setActionBarTitle(titleString); 
 
    } 
 

 
    /** 
 
    * Use this factory method to create a new instance of 
 
    * this fragment using the provided parameters. 
 
    * 
 
    * @param param1 Parameter 1. 
 
    * @param param2 Parameter 2. 
 
    * @return A new instance of fragment SettingsFragment. 
 
    */ 
 
    // TODO: Rename and change types and number of parameters 
 
    public static SettingsFragment newInstance(String param1, String param2) { 
 
     SettingsFragment fragment = new SettingsFragment(); 
 
     Bundle args = new Bundle(); 
 
     args.putString(ARG_PARAM1, param1); 
 
     args.putString(ARG_PARAM2, param2); 
 
     fragment.setArguments(args); 
 
     return fragment; 
 
    } 
 

 
    @Override 
 
    public void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     if (getArguments() != null) { 
 
      mParam1 = getArguments().getString(ARG_PARAM1); 
 
      mParam2 = getArguments().getString(ARG_PARAM2); 
 
     } 
 

 
     //Logout button interaction 
 
     Button logoutButton = (Button) findViewById(R.id.logoutButton); 
 

 
     //Set onclick listener for the logout button 
 
     logoutButton.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View view) { 
 
       // Deleting shared preferences for login activity 
 
       SharedPreferences loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE); 
 
       SharedPreferences.Editor editor = loginPreferences.edit(); 
 
       editor.clear(); 
 
       editor.commit(); 
 
       finish(); 
 

 
       // Launching login activity screen 
 
       Intent intentLogout = new Intent(SettingsFragment.this, LoginActivity.class); 
 
       SettingsFragment.this.startActivity(intentLogout); 
 
      } 
 

 
      ; 
 
     }); 
 
    } 
 

 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
 
          Bundle savedInstanceState) { 
 
     return inflater.inflate(R.layout.fragment_settings, container, false); 
 
    } 
 

 
    // TODO: Rename method, update argument and hook method into UI event 
 
    public void onButtonPressed(Uri uri) { 
 
     if (mListener != null) { 
 
      mListener.onFragmentInteraction(uri); 
 
     } 
 
    } 
 

 
    @Override 
 
    public void onAttach(Context context) { 
 
     super.onAttach(context); 
 
    } 
 

 
    @Override 
 
    public void onStart() { 
 
     super.onStart(); 
 
     try { 
 
      mListener = (OnFragmentInteractionListener) getActivity(); 
 
     } catch (ClassCastException e) { 
 
      throw new ClassCastException(getActivity().toString() 
 
        + " must implement OnFragmentInteractionListener"); 
 
     } 
 
    } 
 

 
    @Override 
 
    public void onDetach() { 
 
     super.onDetach(); 
 
     mListener = null; 
 
    } 
 

 
    /** 
 
    * This interface must be implemented by activities that contain this 
 
    * fragment to allow an interaction in this fragment to be communicated 
 
    * to the activity and potentially other fragments contained in that 
 
    * activity. 
 
    * <p> 
 
    * See the Android Training lesson <a href= 
 
    * "http://developer.android.com/training/basics/fragments/communicating.html" 
 
    * >Communicating with Other Fragments</a> for more information. 
 
    */ 
 
    public interface OnFragmentInteractionListener { 
 
     // TODO: Update argument type and name 
 
     void onFragmentInteraction(Uri uri); 
 
    } 
 
}

あなたはonCreate(Bundle savedInstanceState)方法で私のonClickメソッドを見つけることができます。暗闇から私を助けてくれてありがとう:)

+2

あなたのクエリを解決するための最良の方法を目的利用を作成します。 – buzzingsilently

+0

どのように何かを学びましたか?それについて。私はここで何をしているのですか?私は学ぶ – ItsOdi1

+2

私はちょうどあなたの質問が自分で解決できることを意味しました。だから断片のチュートリアルを見て&あなたは問題を理解します。申し訳ありませんがあなたが怒った場合。 – buzzingsilently

答えて

1

+0

私は今すぐこのコードを試してみます:)私はそれを理解するとき、これはonCreateViewでこれを行う必要があります。なぜなら、これはビューの権利にしかアクセスできない機能なのですから? – ItsOdi1

+1

はい、あなたは正しいです:) –

+0

私はAlertDialogを含んでいます。ユーザがログアウトするためにshureで、動作しているかどうかを尋ねるために:D jippi – ItsOdi1

1

FragmentにはfindViewByIdメソッドがありません。 Fragmentを作成するために、膨らませたビューでこのメソッドを使用する必要があります。

view.findViewById(R.id.your_view);

2
  1. 代わりonCreate()

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
        View view = inflater.inflate(R.layout.your_fragment_layout, container, false); 
        Button your_button = (Button) view.findViewById(R.id.your_button); 
        //... 
    } 
    
  2. の使用onCreateView(..)を:あなたはで、ビューを膨らまフィールド変数ビューに保存し、その後、あなたの意見のinit

    コンテキストから何かを使用したい場合は、getContext()を使用してください。その後、getContext().getSharedPreferences()または新しいIntent(getContext(), ...)と呼ぶことができます。親Activityから何かを呼びたい場合は、コールバック経由で電話するか、getActivity()Activityインスタンスを使用してください。例:getActivity().finish()

しかし、これらのすべてが基本であり、あなたはFragmentSupport Fragmentをお読みください。ボデサービス利用のためのsharedpref

のためのあなたの `onCreateView finish();使用するため

View view=inflater.inflate(R.layout.settings,container,false); 
Button logoutButton = (Button) view.findViewById(R.id.logoutButton); 

以下のようなボタンを宣言getActivity.finish();

使用getActivity.getSharedPreferences

Intent intentLogout = new Intent(getActivity(), LoginActivity.class); 
      getActivity().startActivity(intentLogout); 
1

はあなたの上を移動しますクリckコードをonCreateView(...)メソッドに追加すると、このボタンはフラグメント自体ではなく、膨張したビューで見つけることができます。あなたのような、前getActivity()メソッドを追加する場合は、他の物事がうまくいく

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_settings, container, false); 

    //Logout button interaction 
    Button logoutButton = (Button) view.findViewById(R.id.logoutButton); 

    //Set onclick listener for the logout button 
    logoutButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // Deleting shared preferences for login activity 
      SharedPreferences loginPreferences = getActivity().getSharedPreferences("loginPrefs", MODE_PRIVATE); 
      SharedPreferences.Editor editor = loginPreferences.edit(); 
      editor.clear(); 
      editor.commit(); 
      getActivity().finish(); 

      // Launching login activity screen 
      Intent intentLogout = new Intent(getActivity(), LoginActivity.class); 
      SettingsFragment.this.startActivity(intentLogout); 
     } 

     ; 
    }); 

    return view; 
} 

:。 getActivity()getSharedPreferences(...)

1

フラグメントは、このようOnCreateViewを持っています。

Button logoutButton; 

     @Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View v = new View(getActivity());//you can access your button like this 
logoutButton=(Button)v.findViewById(R.id.logoutButton); 


    return v; 

あなたはこのことができますfragments.hopeに対処する方法を理解することができますthisお読みください。:)

1

は、共有設定が

SharedPreferences loginPreferences = getActivity().getSharedPreferences("loginPrefs", MODE_PRIVATE); 
を使用取得するにはonCreateView

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_settings, container, false); 
    logoutButton = (Button) findViewById(R.id.logoutButton); 
    return view; 
} 

でボタンの参照を取得します。

アクティビティの使用を終了するには、startActivityコールの下に移動します。

getActivity().finish(); 

最初のフラグメントと連携して、あなたのコードを更新する方法を学び、

Intent intentLogout = new Intent(getActivity(), LoginActivity.class);