2016-09-26 66 views
0

我试图将简单的String从@EActivity传递到@EFragment,所以我可以稍后将该值分配给@Fragment中的textView,我不想在捆绑模式使用节能如何将数据从@EActivity传递给@Fragment并分配到视图

我尝试:

@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 

注:提到的所有注解样板库的一部分[android annotation][1]

+0

显然之前被注入(我打赌'onCreateView')... onCreateView不叫之前片段加入到活动...... – Selvin

+0

所以我应该在哪里初始化它,然后 –

+1

天真的'tv_fpd_description'为空:检查视图在setme中是否为空...如果它然后存储数据somwhere并将其设置在片段的@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说法:

@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是这样的:

PlanDescription_.builder(). 
    someDescription("your data") 
    .build(); 
相关问题