片段NullPointerException异常,改变TextView的片段的从活动文本 [英] Fragment NullPointerException, Changing fragment textView's text from activity

查看:269
本文介绍了片段NullPointerException异常,改变TextView的片段的从活动文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我和我的Andr​​oid项目的一个问题。我使用的数据映射到我的穿着发送数据。我在磨损主要活动获取数据的DataListener。

基本上我想改变活性片段的TextView的文本。当我试图做到这一点的失败,我得到 - > NullPointerException异常。我该如何解决呢?

是不是因为我打电话mainactivity`s片段onCreate方法?

MainActivity XML:

 < android.support.v4.view.ViewPager的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID /寻呼机
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>< /android.support.v4.view.ViewPager>

Mainactivity

 公共类MainActivity扩展FragmentActivity {    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main_activity);        viewpager =(ViewPager)findViewById(R.id.pager);
        FragmentManager FM = getSupportFragmentManager();
        viewpager.setAdapter(新FragmentAdapter(FM));        的DataListener =新DataApi。的DataListener(){
            @TargetApi(Build.VERSION_ codeS.LOLLIPOP)
            @覆盖
            公共无效onDataChanged(DataEventBuffer dataEvents){
                最终的ArrayList< D​​ataEvent>事件= FreezableUtils.freezeIterable(dataEvents);
                数据映射mediaMap;
                数据映射updateMap;
                对于(DataEvent事件:事件){
                    PutDataMa prequest putDataMa prequest =
                            PutDataMa prequest.createFromDataMapItem(DataMapItem.fromDataItem(event.getDataItem()));                    如果(event.getType()== DataEvent.TYPE_CHANGED){
                        如果(event.getDataItem()。getUri()的getPath()。等于(/ mypath中)){
                            数据映射= DataMapItem.fromDataItem(event.getDataItem())getDataMap();                            碎裂碎片=(MainControlScreenFragment)getSupportFragmentManager()findFragmentById(R.id.fragmentA)。}
}


解决方案

请单吨执行你的片段,加入MainControlScreenFragment.class本线以上的 onCreateView()方法

 私有静态MainControlScreenFragment实例;公共MainControlScreenFragment(){
}/ **
 *静态方法,它返回片段的实例。如果片段为null,加载它,
 *别人创造新的片段。 Singleton模式。
 *
 * @返回
 * /
公共静态MainControlScreenFragment的getInstance(){
    如果(例如== NULL){
        例如=新MainControlScreenFragment();    }    返回实例;
}

在在您的活动电话 MainControlScreenFragment.getInstance()changeTextMethod(); 而不是 MainControlScreenFragment片段=(MainControlScreenFragment)getSupportFragmentManager()findFragmentById (R.id.fragmentA);

请注意,你的 changeTextMethod() MainControlScreenFragment.class

声明为public

希望它能帮助!

I have a problem with my android project. I am sending data using Datamap to my wear. I have a datalistener for getting data in the wear main activity.

Basically I want to change fragment's textView's text from activity. When I am trying to do this it fails and I got -->NullPointerException. How can I fix that?

Is that because I am calling the fragment in mainactivity`s onCreate method?

MainActivity xml:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</android.support.v4.view.ViewPager>

Mainactivity

public class MainActivity extends FragmentActivity {

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

        viewpager = (ViewPager) findViewById(R.id.pager);
        FragmentManager fm = getSupportFragmentManager();
        viewpager.setAdapter(new FragmentAdapter(fm));

        dataListener = new DataApi. DataListener() {
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onDataChanged(DataEventBuffer dataEvents) {
                final ArrayList<DataEvent> events = FreezableUtils.freezeIterable(dataEvents);
                DataMap mediaMap;
                DataMap updateMap;
                for (DataEvent event : events) {
                    PutDataMapRequest putDataMapRequest =
                            PutDataMapRequest.createFromDataMapItem(DataMapItem.fromDataItem(event.getDataItem()));

                    if (event.getType() == DataEvent.TYPE_CHANGED) {
                        if (event.getDataItem().getUri().getPath().equals("/myPath")) {
                            dataMap= DataMapItem.fromDataItem(event.getDataItem()).getDataMap();

                            FragmentA fragment = (MainControlScreenFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentA);

}
}

解决方案

Make single ton implementation in your fragment, add this lines in MainControlScreenFragment.class above onCreateView() method:

private static MainControlScreenFragment instance;

public MainControlScreenFragment() {
}

/**
 * Static method which return the instance of the fragment. If the fragment is null, load it,
 * else create new fragment. Singleton pattern.
 *
 * @return
 */
public static MainControlScreenFragment getInstance() {
    if (instance == null) {
        instance = new MainControlScreenFragment();

    }

    return instance;
}

After that in your activity call MainControlScreenFragment.getInstance().changeTextMethod(); instead MainControlScreenFragment fragment = (MainControlScreenFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentA);

Note that your changeTextMethod() should be declared public in MainControlScreenFragment.class

Hope it help!

这篇关于片段NullPointerException异常,改变TextView的片段的从活动文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆