另一个与fragment无关的活动的片段中的setText

时间:2016-08-05 12:03:25

标签: java android android-fragments

我想在其他活动的片段中设置textView,此活动不是MainActivity的片段transaction ..

已经尝试过与我的问题相关的其他相关文章的一些方法,但是出了错误..

这是我在另一个活动

中的片段内recieve的方法

片段A

public class FragmentA extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        ProgressDialog pDialog = new ProgressDialog(getContext());
        pDialog.setCancelable(false);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflating view layout
        View layout = inflater.inflate(R.layout.fragment_A, container, false);

        //Put Data to id fragment
        valueName = (TextView) layout.findViewById(R.id.valueNameNav);
        valueStatus = (TextView) layout.findViewById(R.id.valueStatusNav);

    }

    public void setText(String name, String status){

            valueName = (TextView) getView().findViewById(R.id.valueNameNav);
            valueName.setText(name);
            valueStatus = (TextView) getView().findViewById(R.id.valueStatusNav);
            valueStatus.setText(status);
    }
}

这就是我如何从活动

中调用片段中的setText方法
String editValueName= editName.getText().toString();
String lastStatus = valueStatus.getText().toString();

FragmentA mFragment = (FragmentA )
     getSupportFragmentManager().findFragmentById(R.id.fragment_A);

mFragment.setText(editValueName, lastStatus);

但是出现了这样的错误

  

java.lang.NullPointerException:尝试调用虚方法'void   com.example.study.fragment.fragmentA.setText(java.lang.String中,   “空对象引用

上的java.lang.String)”

100%确定字符串getText

上有数据字符串

4 个答案:

答案 0 :(得分:2)

您可以使用商店SharedPreferences来保存字符串并将其加载到每个地方。当然,如果您想更改代码。

答案 1 :(得分:2)

在您的活动中创建一个ID为then且高度为MATCH_PARENT的FrameLayout 然后在您的活动中添加片段,如此

container

然后设置你的文字

FragmentA newFragment = new FragmentA ();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.replace(R.id.container, newFragment).commit();

答案 2 :(得分:2)

不需要在setText方法中使用findView这样做,它可以正常工作

public class FragmentA extends Fragment {

TextView valueName,valueStatus ;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    ProgressDialog pDialog = new ProgressDialog(getContext());
    pDialog.setCancelable(false);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflating view layout
    View layout = inflater.inflate(R.layout.fragment_A, container, false);

    //Put Data to id fragment
    valueName = (TextView) layout.findViewById(R.id.valueNameNav);
    valueStatus = (TextView) layout.findViewById(R.id.valueStatusNav);

 return layout;
}

public void setText(String name, String status){

        valueName.setText(name);
        valueStatus.setText(status);
}

}

答案 3 :(得分:1)

尝试这样做并确保您的片段附加活动。

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

    if(savedInstanceState == null)
    {
        fragment = new FragmentA();
        fragment.setTag(R.id.myfragmentId);
        getFragmentManager().beginTransaction()
            .add(R.id.container, fragment).commit();
    }
    else
    {
        if(fragment == null)
        {
            fragment = (FragmentA) getFragmentManager().findFragmentByTag(R.id.myfragmentId);
        }
    }
}