将数据从活动传递到选项卡式布局片段?

问题描述:

我有两个活动。一个是普通的包含listview的Activity,第二个是Tabbed Layout,它有两个选项卡。一个是“描述”选项卡,另一个是“示例代码”选项卡。将数据从活动传递到选项卡式布局片段?

我已经为每个“OneFragment”和“TwoFragment”创建了两个单独的片段。我需要的是当用户从我的正常活动中点击一个项目时,这个项目将被存储在字符串中,并且该字符串应该被传递给选项卡式布局,并且它应该在OneFragment中显示,即“Description”选项卡

)。我的列表包含{“Android”,“Studio”}如果用户点击Android,这个文本应该传递到描述标签并使用TextView显示文本。请帮帮我。在这里,我有我的各个代码..

NormalActivity - > ListActi.java

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list); 
     lv = (ListView) findViewById(R.id.listView); 
     final List<String> ListElementsArrayList = new ArrayList<String>(Arrays.asList(listElements)); 
     final ArrayAdapter<String> adapter = new ArrayAdapter<String> 
       (getApplicationContext(), android.R.layout.simple_list_item_1, ListElementsArrayList); 
     lv.setAdapter(adapter); 
     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       //Toast.makeText(getApplicationContext(), listElements[position],Toast.LENGTH_LONG).show(); 
       s = listElements[position]; 
       if(position == 1){ 
        s = listElements[position]; 
        Bundle bundle = new Bundle(); 
        bundle.putString("ClickedItem", listElements[position]); 
        OneFragment fragobj = new OneFragment(); 
        TwoFragment fag = new TwoFragment(); 
        fragobj.setArguments(bundle); 
        fag.setArguments(bundle); 
        Intent i = new Intent(getApplicationContext(),BothLay.class); 
        startActivity(i); 
       } 
      } 
     }); 
    } 
} 

TabActivity - > BothLay

public class BothLay extends AppCompatActivity { 
    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_both_lay); 
     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 
     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
    } 
    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new OneFragment(), "Description"); 
     adapter.addFragment(new TwoFragment(), "Sample Code"); 
     viewPager.setAdapter(adapter); 
    } 
    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 
     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 
     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 
     @Override 
     public int getCount(){ 
      return mFragmentList.size(); 
     } 
     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 
     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

能解密选项卡 - > OneFragment(所有我需要将正常活动的数据传递给此片段)

public class OneFragment extends Fragment{ 
    String strtext = "Ajay"; 
    public OneFragment() { 
     // Required empty public constructor 
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootview = inflater.inflate(R.layout.fragment_one, container, false); 
     TextView textView = (TextView) rootview.findViewById(R.id.t1); 
     //strtext = getIntent().getStringExtra("ClickedItem"); //this doesn't work 
     textView.setText(strtext); 
     return rootview; 
    } 
} 

示例代码选项卡 - > Twofragment

public class TwoFragment extends Fragment{ 
    public TwoFragment() { 
     // Required empty public constructor 
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_two, container, false); 
    } 

} 
+0

检查我的答案http://*.com/questions/12739909/send-data-from-activity-to-fragment-in-android/38741476#38741476 – Noorul

+0

需要帮助的手段,问我。 – Noorul

+0

@Er Ajay Jayendran首先结束一个句子,你只需要一个句号。当你发布一个问题时,考虑一下格式,当它很杂乱时,人们不会读它,甚至 –

这里:

fragobj.setArguments(bundle); 
fag.setArguments(bundle); 

上点击按钮不起作用,因为目前开始BothLay活动,而不是添加片段FragmentManager的。

得到它的工作:

通行证捆绑使用意向BothLay Acivity上点击按钮的:

Intent i = new Intent(getApplicationContext(),BothLay.class); 
    i.putExtras(bundle); 
    startActivity(i); 

2.从意向在BothLay活动onCreate然后获取捆绑在拨打adapter.addFragment方法时将它传递给Fragment's:

Bundle bundle = getIntent().getExtras(); 
    tabLayout.setupWithViewPager(viewPager,bundle); 

通行证捆绑到碎片的物体:

private void setupViewPager(ViewPager viewPager,Bundle bundle) { 
     ... 
     Fragment fragmentOne=new OneFragment(); 
     fragmentOne.setArguments(bundle); 
     adapter.addFragment(fragmentOne, "Description"); 
     // do same for second Framgment 
    } 

编辑:

要片段呼叫片段的onCreateView获取数据getArguments方法:

Bundle bundle=getArguments(); 
if(bundle!=null){ 
    if(bundle.containsKey("ClickedItem")){ 
    String strClickedItem=bundle.getString("ClickedItem"); 
    } 
} 

难道这是我提供的所有步骤链接。

第四步需要在你的片段恢复时执行。

下面的代码将在您的活动,

SelectedBundle selectedBundle;

终于你会得到selectedBundle片段的实例。

因此,您可以轻松地将值传递给片段。像,

fragment.setData(String passedData); 

就是这样。

+1

谢谢@Ahamed –