从活动中调用片段方法

时间:2020-01-13 16:59:09

标签: android android-fragments methods

我需要调用在我的父Activity中返回String数组的fragment方法。

class MyAsyncTaskOthers2 extends AsyncTask<Void,Void,Void>{

    @Override
    protected Void doInBackground(Void... voids) {
        Intent intent = getIntent();
        Database db = App.getInstance().getDatabase();
        if(db.classDao().doesGroupExist(intent.getStringExtra(Others.EXTRA_DATA))){
            ClassEntity new_group=new ClassEntity();
            new_group.id_of_a_group= intent.getStringExtra(Others.EXTRA_DATA);
            new_group.monday=mon2Fragment.Text_getter();
            db.classDao().insert(new_group);
        }
        if(!db.classDao().doesGroupExist(intent.getStringExtra(Others.EXTRA_DATA))){
            db.classDao().update(mon2Fragment.Text_getter(),intent.getStringExtra(Others.EXTRA_DATA));

        }
        return null;
    }
}

单击“保存”按钮后,出现NPE错误,它指向

new_group.monday=mon2Fragment.Text_getter();

这是我的代码:

    public class Others2 extends AppCompatActivity {
    private Button button;
    private ViewPager viewPager;
    private Toolbar toolbar;
    private Mon2Fragment mon2Fragment;
    MyAsyncTaskOthers2 mt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_others2);
        button=findViewById(R.id.buttonSave);
        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_back);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mt=new MyAsyncTaskOthers2();
                mt.execute();

            }
        });
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(), Others.class));
            }
        });
        viewPager = findViewById(R.id.viewpager);
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), 6);
        viewPager.setOffscreenPageLimit(5);
        adapter.AddFragment(new Mon2Fragment(), "Mon");
        adapter.AddFragment(new Tue2Fragment(), "Tue");
        adapter.AddFragment(new Wed2Fragment(), "Wed");
        adapter.AddFragment(new Thu2Fragment(), "Thu");
        adapter.AddFragment(new Fri2Fragment(), "Fri");
        viewPager.setAdapter(adapter);




    }



    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch(item.getItemId()){
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
            default:
        return super.onOptionsItemSelected(item);
    }
    }
    public String sendData(){
        Intent intent = getIntent();
        return intent.getStringExtra(Others.EXTRA_DATA);
    }

    public String[] sendDataM(){
        Intent intent=getIntent();
        return intent.getStringArrayExtra("my_stringm");
    }
    class MyAsyncTaskOthers2 extends AsyncTask<Void,Void,Void>{

        @Override
        protected Void doInBackground(Void... voids) {
            Intent intent = getIntent();
            Database db = App.getInstance().getDatabase();
            if(db.classDao().doesGroupExist(intent.getStringExtra(Others.EXTRA_DATA))){
                ClassEntity new_group=new ClassEntity();
                new_group.id_of_a_group= intent.getStringExtra(Others.EXTRA_DATA);
                new_group.monday=mon2Fragment.Text_getter();
                db.classDao().insert(new_group);
            }
            if(!db.classDao().doesGroupExist(intent.getStringExtra(Others.EXTRA_DATA))){
                db.classDao().update(mon2Fragment.Text_getter(),intent.getStringExtra(Others.EXTRA_DATA));

            }
            return null;
        }
    }



    public String[] Text_getter() {
        String[] arr={(String) textView1.getText(),(String) textView2.getText(),
                (String) textView3.getText(),(String) textView4.getText(),
                (String) textView5.getText(),(String) textView6.getText(),
                (String) textView7.getText(),(String) textView8.getText()
        };

        return arr;
    }

    public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    private final List<Fragment> fragmentList=new ArrayList<>();
    private final List<String> FragmentListTitles=new ArrayList<>();

    public ViewPagerAdapter(FragmentManager fm,int behavior) {
        super(fm,behavior);
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }


    @Override
    public int getCount() {
        return FragmentListTitles.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return FragmentListTitles.get(position);
    }



    public void AddFragment(Fragment fragment,String Title){
        fragmentList.add(fragment);
        FragmentListTitles.add(Title);
    }
 }

不知道您是否需要ViewPager,以防万一) 如果您能再提供一个很好的解释,我将不胜感激。 预先谢谢你

1 个答案:

答案 0 :(得分:0)

您的Mon2Fragment未初始化。您可以从适配器的getItem或

中获取它
mon2fragment = new Mon2Fragment()
 adapter.AddFragment(mon2Fragment, "Mon");
        adapter.AddFragment(new Tue2Fragment(), "Tue");
        adapter.AddFragment(new Wed2Fragment(), "Wed");
        adapter.AddFragment(new Thu2Fragment(), "Thu");
        adapter.AddFragment(new Fri2Fragment(), "Fri");

这对NPE有帮助

AsyncTask也将很快被弃用。改用协程,HandlerThreads,RxJava执行异步操作

相关问题