2017-07-27 45 views
0

现在我有2个不同的活动,称为MainControl(带有3个片段)和MainControl2(带有2个片段)。我想要将MainControl中1st片段的变量传递给MainControl2中的1st片段。Android如何通过意图在2个不同活动之间传递2个片段之间的变量

以下是我使用来实现这个代码: -

MainControl 1片段

@Override 
    public void openPostDescription(Data2 data2) { 
     Intent intent = new Intent(getActivity(), MainControl2.class); 
     intent.putExtra("title", data2.getTitle()); 
     intent.putExtra("comment", data2.getNumComments()); 
     intent.putExtra("domain", data2.getDomain()); 
     intent.putExtra("author", data2.getAuthor()); 
     intent.putExtra("image", data2.getUrl()); 
     intent.putExtra("score", data2.getScore()); 
     intent.putExtra("ups", data2.getUps()); 
     startActivity(intent); 
    } 

MainControl2.java

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

     Bundle bundle = getIntent().getExtras(); 
     PostDescription postDescription = new PostDescription(); 
     postDescription.setArguments(bundle); 

     toolbar = (Toolbar)findViewById(R.id.mainControl2Toolbar); 
     setSupportActionBar(toolbar); 



     tabLayout = (TabLayout)findViewById(R.id.mainControl2TabLayout); 
     viewPager = (ViewPager)findViewById(R.id.mainControl2ViewPager); 

     viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 

     viewPagerAdapter.addFragments(new PostDescription(), "DESCRIPTION"); 
     viewPagerAdapter.addFragments(new PostComments(), "COMMENT"); 

     viewPager.setAdapter(viewPagerAdapter); 
     tabLayout.setupWithViewPager(viewPager); 
    } 

MainControl2 1片段

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_post_description, container, false); 

    String title = getArguments().getString("title"); 


    return v; 
} 

我得到的错误是空对象引用中的标题。我只是无法弄清楚它在什么阶段造成这种中断,有什么我失踪?

+0

您似乎没有对添加给定参数的'postDescription'片段做任何事情。相反,你在视图寻呼机实例中实例化一个新的PostDescription()。 – shiv

回答

0

在MainControl2的第一个片段中。写 getActivity().getIntent().getStringExtra("title");

所以你片段的最终代码变成:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_post_description, container, false); 

    String title = getArguments().getString("title"); 


    return v; 
} 

您已经使用getArguments().getString("title");它返回,同时创造一个片段传递的参数。

了解更多如何使用和setArguments()here

相关问题