2016-09-26 6 views
0

Stringを@Ectivityから@EFragmentに単純に渡そうとしているので、後で@EFragmentのtextViewにその値を割り当てることができます。バンドルパターンに節約を使用したい@Ectivityから@EFragmentにデータを渡して表示に割り当てる方法

私の試み:

@EActivity(R.layout.activity_pre_plan_detail) 
public class PrePlanDetailActivity extends AppCompatActivity { 
    // some long adapter code 

    @AfterViews 
    void inits_(){ 
     adapter.addFragment(myFragment_.builder().build().setme("something")); 
    } 
} 
______________________________________________________________________________ 

@EFragment(R.layout.fragment1) 
public class PlanDescription extends Fragment { 

    @ViewById 
    TextView tv_fpd_description; 


    public void setme(String data){ 
     tv_fpd_description.setText(data); 
    } 

} 

出力/エラー:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 

注:

@EFragment(R.layout.fragment1) 
public class PlanDescription extends Fragment { 

    @FragmentArg 
    String someDescription; 

    @ViewById 
    TextView tv_fpd_description; 

    @AfterViews 
    void afterViews() { 
     tv_fpd_description.setText(someDescription); 
    } 
} 

そして、あなたが作成することができます:すべての注釈を述べたが、定型ライブラリあなたは本当にこのためFragment引数を使用する必要があります[android annotation][1]

+0

それが注入される前に、明らか 'tv_fpd_description'がヌルである(私はonCreateView''に賭ける)... ... – Selvin

+0

ので、私はその後 –

+1

ナイーブソリューションを、それを初期化する必要があります。もしsetmeでviewがヌルであるかどうかチェックしてください。そうであれば、データを保存し、フラグメントの@AfterViewsにセットするか、 'adapter.addFragment'の後にsetmeを使います。 – Selvin

答えて

1
Try with local broadcast manager 
**Activity code:** 
----------------- 
Intent intent = new Intent("my-custom-event"); 
     intent.putExtra("message", "something"); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 

**fragment code:** 
------------------- 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     LocalBroadcastManager.getInstance(getActivity()).registerReceiver(onReceiver , new IntentFilter("my-custom-event")); 
    } 
@Override 
    public void onDestroy() { 
     LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onReceiver); 
     super.onDestroy(); 
    } 
**BroadCastReceiver:** 

private BroadcastReceiver onReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String data= intent.getStringExtra("message"); 
      tv_fpd_description.setText(data); 
     } 
    }; 
+0

いいですが、私はAA –

0

の一部でありますFragmentこのように:

0フラグメントはアクティビティに追加される前に呼び出されていないonCreateView
PlanDescription_.builder(). 
    someDescription("your data") 
    .build(); 
関連する問題