2016-07-18 3 views
0

프래그먼트 (RecoveryFragment)가있는 액티비티 (RecoveryActivity)가 있습니다. 버튼 클릭은 RecoveryFragment가 표시된이 활동을 호출합니다. 난 그냥 활동으로 RecoveryFragment를 직접 호출하고 싶다. 이 단편을 활동으로 변환하는 방법. 여기 멍청한 녀석! 어떤 도움을 주시면 감사하겠습니다.프래그먼트를 액티비티로 변환

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

왜 조각을 활동으로 변환 하시겠습니까? Use Fragment는 좋은 습관입니다. 그러나 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()

그리고 돈 없애 앱의 Manifest 파일에서 새로운 활동을 선언하는 것을 잊지 마세요.

<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

예, 말씀 드렸듯이이 작업을 시도했지만 일부 오류가 발생했습니다. 나는 그것을 너무 명백하게 선언했다. 위의 코드에서 어떻게하는지 알려 주시면 도움이 될 것입니다. 안드로이드를 배우는 것은 당신이 위에서 말한 것을 많이 얻지 못했습니다. 나는 감사 할 것이다. –

관련 문제