2016-06-14 10 views
2

オブジェクトをアクティビティからフラグメントに渡したいと思います。私のアクティビティには、ビューページャーと4つのフラグメントからなるタブレイアウトがあります。オブジェクトをアクティビティからフラグメントにアクセスする方法は?

私はすべてのフラグメントでアクセスしたいアクティビティのオブジェクトを持っています。

私はアクティビティでgetMethodを作成し、フラグメント内のオブジェクトにアクセスしようとしました。しかし、それは動作していない、私はnullとしてオブジェクトを取得しているすべての方法。

活動:私はフラグメントにプロファイルオブジェクトを渡したい

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

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

    toolbar.setTitle("Profile"); 

    toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp); 


    setSupportActionBar(toolbar); 

    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      finish(); 

     } 
    }); 

    GetProfileAsyncTask task = new GetProfileAsyncTask(ProfileActivity.this,this,profile); 

    // task.setTaskCompletedListener(this); 

    task.execute("sid"); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(),mTitles,mNumbOfTabs); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager)findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    mTabs = (SlidingTabLayout)findViewById(R.id.tabs); 
    mTabs.setDistributeEvenly(true); 
    mTabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
     @Override 
     public int getIndicatorColor(int position) { 
      return getResources().getColor(R.color.tab_scroll_color); 
     } 
    }); 
    mTabs.setViewPager(mViewPager); 


} 


@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. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

public JSONObject getProfile(){ 
    return this.profile; 
} 
@Override 
public void doInBackground() { 

} 

@Override 
public void doPostExecute(JSONObject response) { 
    profile = response; 
    Toast.makeText(ProfileActivity.this, 
      "Finish", Toast.LENGTH_LONG).show(); 
} 

フラグメント:

public class BasicInformationFragment extends android.support.v4.app.Fragment{ 

    EditText email,pass,mobile,code; 
    public static final String MyPREFERENCES = "MyPrefs" ; 
    SharedPreferences sharedpreferences; 
    JSONObject profile; 
    String userUsername,password,mobileNumber,emailId; 
    private ProfileActivity myActivity; 

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

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_basic_information, 
       container, false); 
     // try{ 



    ((ProfileActivity)getActivity()).getProfile(); 

      // password = profile.getString("userPassword"); 
     // mobileNumber = profile.getString("userMobileNo"); 
     // emailId = profile.getString("userEmailid"); 



      email = (EditText) view.findViewById(R.id.edt_email); 
      pass = (EditText) view.findViewById(R.id.edt_pass); 
      mobile = (EditText) view.findViewById(R.id.edt_mobile); 
      code = (EditText) view.findViewById(R.id.edt_code); 


     // email.setText(emailId); 
     // pass.setText(password); 
      // mobile.setText(mobileNumber); 


     // } 


    // catch (JSONException e) 
    // {} 
     return view; 
    } 

ここで何が間違っているだろうか?助けてください。ありがとうございます..

基本的に私は断片のアクティビティのオブジェクトにアクセスしたいと思います。別のアプローチがある場合は私に教えてください。ありがとう

+0

'((ProfileActivity)getActivity())。getProfile();' – Lawrance

+0

を呼び出すときにエラーが発生しました。私がデバッグするとき、オブジェクトはnullです。アクティビティの@Lawrance –

+1

はAsyncTaskの完了後にプロファイルオブジェクトを取得していますか? – NehaK

答えて

0

アクティビティで非同期タスクを実行する理由あなたはフラグメント内で非同期タスクを実行することもできます。また、結果を断片化してコールバックから取得します。このため

+1

をチェックすることができます私はすべての断片でこのオブジェクトにアクセスする必要があります。したがって、n個のアクティビティでasyncTaskを実行し、すべてのフラグメント内のアクティビティからオブジェクトにアクセスすることが考えられました。 @ Avinash8989 –

+0

コールバックまたはインターフェイスを使用してデータを送信する。すべてのフラグメントのCallback Interfaceを呼び出します。そしてそれをポストから発射する。 OnAttachのフラグメントにコールバックをアタッチします。 コールバックを使用して、アクティビティからデータをフラグメントに送信する方法を検索します。 詳細については、デベロッパーサイトをご覧ください。 https://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity –

0

オーバーライドonAttched()メソッドgetActivity()メソッドは、アクティビティの参照をnullにします。

public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    this.mActivity = activity; 
    JSONObject mObject =((ProfileActivity)getActivity()).getProfile(); 
} 
+0

はまだnullです。 @Divyesh Boda –

+0

アクティビティクラスでは、JSONObjectが割り当てられているプロファイルを見つけることができません。プロファイルオブジェクトが割り当てられる前に、オブジェクトがフラグメントになっていないことを確認してください。 –

+0

は、プロファイルアクティビティのdoPostExecueメソッドに割り当てられています。 @Divyesh Boda –

0

JSON Object.andメイン活性の値を割り当てることは、次に Common.commonprofileobject=XXXX; ..次いで活性の値を割り当て、self..ie Uを

public class Common{ 
    public static JSONObject commonprofileobject; 
} 

を別の共通のクラスを作成することができフラグメントからアクセスしてください

+0

ここで共通のクラスでプロファイル活動のオブジェクトを取得する方法は?@VYSHAK M –

+0

Uは、フラグメントページ操作を処理する前に、urアクティビティの値を割り当てる必要があります。 –

+0

ur postexecutionメソッドでは、 'Common.commonprofileオブジェクト= response; 'フラグメントクラスでこの値を取得する' profile = Common.commonprofileobject; ' –

0

私はこのAsyncTask(
コードの一部)の前にプロファイルオブジェクトを使用しようとしていると思います。あなたができることの1つは、コールバックを使用することです。 asunctaskが返ったときに、Activityはフラグメントに通知します。

task.setTaskCompletedListener(new GetProfileAsyncTask.OnTaskCompleted() { 
    public void onTaskCompleted(JSONObject response) { 

     profile = response; 

    } 
}); 

は、詳細については、このlinkをご覧ください。または、あなたはまた、承認された答えhereを参照することができます。

0

プロジェクトでbasefragmentクラスを追加し、例えば

public class BaseFragment extends Fragment{ 

private Activity activity; 
public ProgressDialog prog = null; 

private MainActivity parent; 
private final String TAG = "";//MainActivity.class.getName().toString(); 

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

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    this.activity = activity; 
    setParent(getHomeActivity()); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    return super.onCreateView(inflater, container, savedInstanceState); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
} 

public MainActivity getHomeActivity() { 
    try { 
     return (MainActivity) activity; 
    } catch (Exception ex) { 
     return null; 
    } 
} 

public MainActivity getParent() { 
    return parent; 
} 
public void setParent(MainActivity parent) { 
    this.parent = parent; 
} 
} 

はこのようにフラグメントを拡張

basefragmentクラスから自分のフラグメントを拡張し、mainactivityから、あなたのオブジェクトにアクセスするための断片でのgetParentメソッドを使用

public class BasicInformationFragment extends BaseFragment { 

EditText email, pass, mobile, code; 
public static final String MyPREFERENCES = "MyPrefs"; 
SharedPreferences sharedpreferences; 
JSONObject profile; 
String userUsername, password, mobileNumber, emailId; 
private ProfileActivity myActivity; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getParent().yourobjectnametoaccess; 

} 
} 
0

あなたの 'ProfileActivity' クラスでの活動の静的インスタンスを作成します

public static ProfileActivity instance; 

public static ProfileActivity getInstance() { 
    if (instance == null) { 
     instance = new ProfileActivity(); 
    } 
    return instance; 
} 

その後、私はこのことを願っていますJSONオブジェクト

public JSONObject getProfile(){ 
return this.profile; 
} 

今すぐ「onCreateView」メソッド内のあなたのフラグメントにあなたが直接道

JSONObject profileObj = ProfileActivity .getInstance().getProfile(); 

次あなたのJSONオブジェクトのはGetProfile 'メソッドにアクセスすることができたているあなたのメソッドを書きますが手伝う。

+0

nullを返します。 @Reena –

+0

あなたはあなたにlog catを共有してもらえますか?あなたはアクティビティのメソッドをoncreateに登録する必要があります。 インスタンス= this; – Reena

+0

これを試しました。それでもヌル@ Reena –

関連する問題