【问题标题】:Parsing data from FragmentActivity to already created Fragment从 FragmentActivity 解析数据到已经创建的 Fragment
【发布时间】:2017-05-16 20:02:54
【问题描述】:

我有一个 FragmentActivity 和三个 Fragment。当用户滑动屏幕时,我在 FragmentActivity 中使用 Viewpager 来一一显示我的所有片段。此外,我可以使用来自单独适配器的 intent.getExtras().getString() 将一些字符串数据放入我的 FragmentActivity。现在我想使用用户定义的函数将这个字符串数据从 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);

}

这是我的片段类

      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

【问题讨论】:

  • FrasgmentOne 包含一个名为 name 的 TextView。 getDetail 方法还包含一个名为 name 的参数。本质上,您是在 String 参数上调用 SetText。即 name.setText(name)
  • 我试过了,但是不行
  • 我在评论您的代码中的一个错误。不想回答你的问题。
  • 非常感谢您的大力帮助!

标签: android android-fragments android-viewpager android-fragmentactivity


【解决方案1】:

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

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

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

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

【讨论】:

  • 你能告诉我如何在 FragmentActivity 中声明意图吗?
【解决方案2】:

这里的问题是你想设置 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;
}

}

【讨论】:

  • @bzmg 这次日志显示 java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on an null object reference
  • 你能发布完整的日志吗?哪里说的?
  • 不应该是tvName.setText(name); 而不是name.setText(name);
  • 是的,它是 tvName.setText(name);打错了。
  • 是的,我知道这一点,但我的错误是别的 :)
猜你喜欢
  • 1970-01-01
  • 2020-07-23
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多