从 FragmentActivity 解析数据到已经创建的 Fragment

Parsing data from FragmentActivity to already created Fragment

我有一个 FragmentActivity 和三个片段。我在 FragmentActivity 中使用 Viewpager 在用户滑动屏幕时一个一个地显示我的所有片段。此外,我可以使用来自单独适配器的 intent.getExtras().getString() 将一些字符串数据获取到我的 FragmentActivity 中。现在我想使用用户定义的 function.But 将此字符串数据从 FragmentActivity 发送到我的第一个 Fragment 我收到 NullPointerException。有人请看看我的代码并建议我一些解决方案。

public class ExpandedPopupActivity extends FragmentActivity {

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


    Intent i = this.getIntent();
    String Nam = i.getExtras().getString("name");
    String Sur = i.getExtras().getString("surname");
    String Emp = i.getExtras().getString("empID");
    String Slr = i.getExtras().getString("salary");

   if(Nam!=null && Sur!=null && Emp!=null && Slr!=null ){
       FragmentOne f = new FragmentOne();
       f.getDetail(Nam,Sur,Emp,Slr);


    ViewPager pager = (ViewPager)findViewById(R.id.popuppager);
    FragmentAdapter fadapter= new FragmentAdapter(getSupportFragmentManager());
    pager.setAdapter(fadapter);

}

这是我的片段Class

      public class FragmentOne extends Fragment {
        TextView name,surname,emp,sal;

        public void getDetail(string name,String surname,String empid,String salary){
             name.setText(name);
             surname.setText(surname);
             emp.setText(empid);
             sal.setText(salary);
    }
        @Override
        public View onCreateView(LayoutInflater inflater,  ViewGroup container,  Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_one,container,false);

            name = (TextView)view.findViewById(R.id.name);
            surname = (TextView)view.findViewById(R.id.s_name);
            emp = (TextView)view.findViewById(R.id.emp_id);
            sal = (ImageView)view.findViewById(R.id.salary);
            return view;
    }

 }

日志是这么写的

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

您可以在片段中执行您刚刚在 activity 中执行的相同操作。

例如,要获取片段中的名称,请执行此操作。

name = getActivity().getIntent().getExtras().getString("name");

您可以在片段的 onCreateView 或 onCreate 方法中执行此操作。

这里的问题是你想设置 TextViews 的值但是它们没有被初始化。

如下所示:

public class FragmentOne extends Fragment {

String name, surname, emp, sal,
TextView tvName, tvSurname, tvEmp, tvSal;

public void getDetail(string name,String surname,String empid,String salary){
 this.name = name;
 this.surname= surname;
 this.emp= empid;
 this.sal= salary;
} 

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

     tvName= (TextView)view.findViewById(R.id.name);
     tvSurname= (TextView)view.findViewById(R.id.s_name);
     tvEmp= (TextView)view.findViewById(R.id.emp_id);
     tvSal= (ImageView)view.findViewById(R.id.salary);

     name.setText(name);
     tvSurname.setText(surname);
     tvEmp.setText(empid);
     tvSal.setText(salary);

     return view;
}

}