2016-07-18 7 views
0

私はフラグメント(RecoveryFragment)を持つアクティビティ(RecoveryActivity)を持っています。ボタンをクリックすると、RecoveryFragmentが表示されたこのアクティビティが呼び出されます。私はただ単にアクティビティとしてRecoveryFragmentを直接呼び出したいと思う。このフラグメントをアクティビティに変換する方法。ここのNoob!どんな助力も深く感謝します。フラグメントをアクティビティに変換する

public class RecoveryFragment extends Fragment implements Constants { 

private ProgressDialog pDialog; 

Button mContinueBtn; 
EditText mEmail; 
String email; 

private Boolean loading = false; 

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

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setRetainInstance(true); 

    initpDialog(); 
} 

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

    View rootView = inflater.inflate(R.layout.fragment_recovery, container, false); 

    if (loading) { 

     showpDialog(); 
    } 

    mEmail = (EditText) rootView.findViewById(R.id.PasswordRecoveryEmail); 

    mContinueBtn = (Button) rootView.findViewById(R.id.PasswordRecoveryBtn); 

    mContinueBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      email = mEmail.getText().toString(); 

      if (!App.getInstance().isConnected()) { 

       Toast.makeText(getActivity(), R.string.msg_network_error, Toast.LENGTH_SHORT).show(); 

      } else { 

       Helper helper = new Helper(); 

       if (helper.isValidEmail(email)) { 

        recovery(); 

       } else { 

        Toast.makeText(getActivity(), getText(R.string.error_email), Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    }); 


    // Inflate the layout for this fragment 
    return rootView; 
} 

public void onDestroyView() { 

    super.onDestroyView(); 

    hidepDialog(); 
} 

protected void initpDialog() { 

    pDialog = new ProgressDialog(getActivity()); 
    pDialog.setMessage(getString(R.string.msg_loading)); 
    pDialog.setCancelable(false); 
} 

protected void showpDialog() { 

    if (!pDialog.isShowing()) pDialog.show(); 
} 

protected void hidepDialog() { 

    if (pDialog.isShowing()) pDialog.dismiss(); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 

    super.onSaveInstanceState(outState); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 
} 

public void recovery() { 

    loading = true; 

    showpDialog(); 

    CustomRequest jsonReq = new CustomRequest(Request.Method.POST, METHOD_ACCOUNT_RECOVERY, null, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 

        try { 

         if (!response.getBoolean("error")) { 


          Toast.makeText(getActivity(), getText(R.string.msg_password_reset_link_sent), Toast.LENGTH_SHORT).show(); 
          getActivity().finish(); 

         } else { 

          Toast.makeText(getActivity(), getText(R.string.msg_no_such_user_in_bd), Toast.LENGTH_SHORT).show(); 
         } 

        } catch (JSONException e) { 

         e.printStackTrace(); 

        } finally { 

         loading = false; 

         hidepDialog(); 
        } 

       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

      loading = false; 

      hidepDialog(); 

      Toast.makeText(getActivity(), getText(R.string.error_data_loading), Toast.LENGTH_LONG).show(); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("clientId", CLIENT_ID); 
      params.put("email", email); 

      return params; 
     } 
    }; 

    App.getInstance().addToRequestQueue(jsonReq); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
}} 
+0

なぜフラグメントをアクティビティに変換しますか?フラグメントを使用してください。それは良い方法です。しかし、あなたは自分の活動にfragment_recoveryレイアウトを直接加えることができます。 タグを使用してcontainer_bodyレイアウトに直接レイアウトを含める – USKMobility

答えて

0

あなたが代わりにフラグメントのAppCompatActivityを拡張することによって開始

(これはあなたのフラグメント

public class RecoveryActivity extends AppCompatActivity RecoveryActivity

public class RecoveryActivity extends ActivityBase { 

private static final String TAG = "password_recovery_activity"; 

Toolbar mToolbar; 

Fragment fragment; 

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

    mToolbar = (Toolbar) findViewById(R.id.toolbar); 

    setSupportActionBar(mToolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 

    if (savedInstanceState != null) { 

     fragment = getSupportFragmentManager().getFragment(savedInstanceState, "currentFragment"); 

    } else { 

     fragment = new RecoveryFragment(); 
    } 

    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.container_body, fragment).commit(); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 

    super.onSaveInstanceState(outState); 

    getSupportFragmentManager().putFragment(outState, "currentFragment", fragment); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 

    fragment.onActivityResult(requestCode, resultCode, data); 
} 

@Override 
public void onBackPressed(){ 

    finish(); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 

    switch (item.getItemId()) { 

     case android.R.id.home: { 

      finish(); 
      return true; 
     } 

     default: { 

      return super.onOptionsItemSelected(item); 
     } 
    }}} 

RecoveryFragmentですが、私はRecoveryActivityそれを改​​名した。あなたは、あなたが発生することはありません同じ名前の2つのアクティビティがあります。それはRecoveryActivityNewと呼ばれています。以下の手順は、あなたのためのものではありませんRecoveryActivityという名前ですが、RecoveryFragmentコードの名前です。

次に、フラグメントにのみ関連するonAttach()やonDetach()などのメソッドを削除します。 onDestroyViewを削除します。あなたはフラグメントを持っていないので、onCreateView()、そこにあるすべてのコードを削除し、今)(のonCreateで

をそれを置く、あなたは次のようにビューを参照:

mContinueBtn = (Button) findViewById(R.id.PasswordRecoveryBtn);

だけアクティビティでツールバーを参照したように(あなたはrootViewを失います)。

また、例えばトーストを表示するには、あなたはgetActivity()メソッドを使用しませんが、thisまたはRecoveryActivity.thisを使用します。

Toast.makeText(RecoveryActivity.this, R.string.msg_network_error, Toast.LENGTH_SHORT).show();

をコンストラクタpublic RecoveryFragment()

ドンを取り除きますアプリのマニフェストファイルで新しいアクティビティを宣言するのを忘れないでください。

<activity 
     android:name=".RecoveryActivity" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    android:screenOrientation="portrait"> 
    <intent-filter> 
     <action android:name="com.your.packagename.RecoveryActivity" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 
+0

はい、あなたが言ったように何かをしようとしましたが、私はいくつかのエラーを作り出しています。私もそれを明示しました。上記のコードで私にそれを行う方法を教えてもらえると非常に役に立ちます。アンドロイドを学ぶことは、あなたが上で言ったことをあまり得られなかった。私は感謝します –

関連する問題