簡體   English   中英

將數據從FragmentActivity解析到已創建的Fragment

[英]Parsing data from FragmentActivity to already created Fragment

我有一個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

您可以在片段中執行與在活動中相同的操作。

例如,為了獲取片段中的名稱,請執行此操作。

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;
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM