2

У меня есть две деятельности. Один из них - нормальная активность, которая содержит listview, а вторая - Tabbed Layout, у которой есть две вкладки. Один - вкладка «Описание», а другая - вкладка «Образец кода».Передача данных из фрагмента фрагмента с вкладкой в ​​вкладку?

Я создал для вас два отдельных фрагмента, а именно «OneFragment» и «TwoFragment». Все, что мне нужно, - это когда пользователь нажимает элемент из моей обычной деятельности, этот элемент будет храниться в строке, и эта строка должна быть передана в макет с вкладками, и ее следует показать в OneFragment, т. Е. Вкладку «Описание»

(Ex). Мой список содержит {"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); 
     } 
    } 
} 

Вкладка Decription -> 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://stackoverflow.com/questions/12739909/send-data-from-activity-to-fragment-in-android/38741476#38741476 – Noorul

+0

Нужна помощь, спросите меня. – Noorul

+0

@ Er Ajay Jayendran Сначала, чтобы закончить предложение, вам понадобится только одна полная остановка. Когда вы отправляете вопрос о формате, а также, когда он очень грязный, люди не будут читать его даже –

ответ

4

Здесь:

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

Не работает на нажатие кнопки, так как в настоящее время, начиная BothLay активность вместо добавления фрагмента FragmentManager.

Чтобы получить его работы:

1. Pass пучка с помощью Intent к BothLay Acivity на Щелк Баттона:

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

2. Получить Bundle от Intent в onCreate от BothLay деятельности, то передать его Фрагменту при вызове метода adapter.addFragment:

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 
    } 

EDIT:

Чтобы получить данные фрагмента вызова getArguments метода в onCreateView фрагменте:

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

Выполните все шаги, которые я обеспечиваю связь.

И 4-й шаг необходимо реализовать, когда ваш фрагмент будет возобновлен.

ниже код будет в вашей деятельности,

SelectedBundle selectedBundle;

, наконец, вы получите экземпляр фрагмента на выбранном блоке.

Таким образом, вы можете легко передать значение фрагменту. Нравится,

fragment.setData(String passedData); 

вот и все.

+1

Спасибо @Ahamed –