2014-09-23 3 views
0

'홈'이라는 액티비티가 있습니다. 로그인 후이 활동으로 리디렉션됩니다. 이 액티비티에서는 두 조각 (Header & footer)을 이러한 방식으로 구현합니다.android에서 액티비티의 데이터를 조각으로 전달하는 방법

View header = inflater.inflate(R.layout.fragment_header_fragement, null); 
View footer = inflater.inflate(R.layout.fragment_footer, null); 

mDrawerListView.addHeaderView(header); 
mDrawerListView.addFooterView(footer); 

그리고 '홈'활동에 구현 된 헤더 조각에 주로 표시하고 싶습니다. 일부 데이터는 로깅 활동에서 전송됩니다. 제가 조금은 검색 한 문제는, 우리는 단지 주된 활동에서 단편을 추가하거나 대체 할 수 있다는 것을 발견했습니다. 다른 단편에서는 그렇지 않습니다. 나는 해결책을 모으려고했지만 아직은 안된다. 이건 내 코드입니다 :

@Override 
protected void onPostExecute(final String res) { 
    //LoginTask = null; 
    //showProgress(false); 

    try { 
     jObj = new JSONObject(res); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    try { 
     if (jObj.getString("code").equals("1")) { 

      infos = new Bundle(); 

      infos.putString("ID",jObj.getString("ID")); 
      infos.putString("Name",jObj.getString("display_name")); 
      infos.putString("ImgUrl","http://unchained-network.com/uploads/profilpics/53f5c570b6ac2.png"); 

      android.support.v4.app.FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); 
      HeaderFragement hf = new HeaderFragement(); 

      //Charger les infos dans l'activité 
      hf.setArguments(infos); 
      tr.add(R.id.frgmnt,hf); 
      tr.commit(); 

      Intent myIntent = new Intent(getActivity(), HomesActivity.class); 
      //Lançer l'activité 
      startActivityForResult(myIntent, 0); 

     } else { 
      //password.setError(getString(R.string.error_incorrect_password)); 
      //password.requestFocus(); 
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      builder.setTitle("Error !"); 
      builder.setMessage("The information entered is incorrect.\nPlease try again!") 
        .setCancelable(false) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 

     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

} 

그리고 이것은 내가 조각

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    name = (TextView) getView().findViewById(R.id.nameH); 
    img = (ImageView) getView().findViewById(R.id.imageViewHeader); 

    Bundle infos = getArguments(); 
    name.setText(infos.getString("Name")); 
    img.setImageBitmap(getBitmapFromURL(infos.getString("ImgUrl"))); 

} 

로 데이터를 추출하는 방법이다 그래서 모든 솔루션 바랍니다. 감사합니다.

답변

0

왜 의도를 통해 데이터를 전달하지 않습니까? LoginHome의 두 가지 활동이 있습니다. 위의 코드에서

Intent myIntent = new Intent(getActivity(), HomesActivity.class); 
       //Lançer l'activité 
       startActivityForResult(myIntent, 0); 

, 당신은 단순히이

myIntent.putExtra("name", "value");

같은 추가 정보를 추가 할 수 있습니다 그리고 당신은

String extra = i.getStringExtra("name");

그리고 집 활동이를 검색 할 수 있습니다 헤더 조각에이 여분을 전달하십시오.

+0

문제는 내 두 단편이 독립적이고, 집에서 조각으로 데이터를 전달해야한다고 말합니다. 내가 로그인에서 조각으로 직접 전달하려는 경우 똑같은 것 같아요. 나의 조각들은 홈 활동으로 구현되지만 분리되어 있습니다. –

+0

분리 된 것은 무엇을 의미합니까? –

+0

HeaderFragment (클래스 및 레이아웃)를 만들고 동일한 방법으로 바닥 글을 내비게이션 서랍에 구현 한 후 홈 액티비티 –

0

변수에 조각을 전달하는 데 문제가 없습니다. 방금 코드를 복사했는데 제대로 작동합니다.

은 활동 :

Bundle infos = new Bundle(); 
infos.putString("ID", "1"); 
infos.putString("Name", "Gonzo"); 
FragmentMain frag = new FragmentMain(); 
frag.setArguments(infos); 

조각 :

Bundle infos = getArguments(); 
Log.i(getTag(), infos.getString("Name")); 

난 당신이 onPostExecute에 약간의 로깅을 넣어, 또는 디버그 모드를 통해 단계 좋을 것. 귀하의 json이 귀하가 기대하는 바를 돌려주고 있는지 확인하십시오.

일반적인 제안 사항으로 infos.getString은 두 개의 매개 변수를 허용하고 두 번째 매개 변수는 유용 할 수있는 기본값입니다. 또한 "이름"대신 공개 된 정적 문자열을 사용하고이를 참조하는 하드 코딩 된 키를 사용하지 마십시오.

행운을 빈다.

+0

이 작동하지 않습니다! 전에 해봤 어! 감사 –

관련 문제