2015-10-22 3 views
-1

Мне нужно передать некоторые значения фрагменту из класса Activity. Я попытался передать пучок фрагменту, но получил нулевое значение. Мне нужно получить значения, а затем запустить AsyncTask в активности фрагмента.Передача строки в фрагмент из действия

Фрагмент кода FirstFragment.java:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     v = inflater.inflate(R.layout.first_frag, container, false); 
     Bundle bundle = getArguments(); 
     if(bundle!=null) 
     { 
      sensorUID=getArguments().getString("senID"); 
      System.out.println("we got this: " + sensorUID); 
     } 
     System.out.println("we got this2: "+ sensorUID); 
     new MyAsyncTask().execute(); 
     return v; 
    } 

Код (класс активности):

package test.sensorv2; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 


public class scatter extends FragmentActivity { 
    protected String sensorUID; 
    protected String tankname; 
    protected String SCALE_M; 
    protected String SCALE_C; 
    protected String DPs; 
    protected String UNITs; 
    String np; 
    int k = 0; 
    float m; 
    float c; 
    int numVar; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_scatter); 
     sensorUID = getIntent().getStringExtra("sUID"); 
     tankname = getIntent().getStringExtra("tNAME"); 
     SCALE_C = (getIntent().getStringExtra("tSCALEC")); 
     SCALE_M = (getIntent().getStringExtra("tSCALEM")); 
     DPs = (getIntent().getStringExtra("tDP")); 
     UNITs = (getIntent().getStringExtra("tUNIT")); 
     numVar = Integer.parseInt(DPs); 

     Bundle b=new Bundle(); 
     b.putString("key", sensorUID); 
     FirstFragment f=new FirstFragment(); 
     f.setArguments(b); 

     ViewPager pager = (ViewPager) findViewById(R.id.viewPager); 
     pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); 
    } 

    private class MyPagerAdapter extends FragmentPagerAdapter { 


     public MyPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int pos) { 
      switch (pos) { 

       case 0: 
        return FirstFragment.newInstance("FirstFragment, Instance 1"); 
       case 1: 
        return SecondFragment.newInstance("SecondFragment, Instance 1"); 
       default: 
        return ThirdFragment.newInstance("ThirdFragment, Default"); 
      } 
     } 

     @Override 
     public int getCount() { 
      return 3; 
     } 
    } 
} 
+0

Посмотрите здесь: http://stackoverflow.com/questions/19894681/android-pass-a-value-from-container-activity-to-its-fragment – TheCrafter

+0

@ TheCrafter Я попробовал это. Он не может найти putInt или putString для намерения –

ответ

1
@Override 
    public Fragment getItem(int pos) { 
     Fragment fragment; 
     Bundle args = new Bundle(); 
     args.putString("sendID", sensorUID); 

     switch (pos) { 
      case 0: 
       fragment = FirstFragment.newInstance("FirstFragment, Instance 1"); 
       break; 
      case 1: 
       fragment = SecondFragment.newInstance("SecondFragment, Instance 1"); 
       break; 
      default: 
       fragment = ThirdFragment.newInstance("ThirdFragment, Default"); 
     } 
     fragment.setArguments(args); 
     return fragment; 
    } 

Тогда вы можете получить аргументы в вашем фрагменте с помощью `getArguments.getString (" sendID «);

Или вы можете просто передать свой идентификатор в качестве параметра в newInstance как этот fragment = FirstFragment.newInstance(senId); и в новом Instance вы передаете данные из newInstance в onCreateview так:

public static Fragment newInstance(String senID){ 
    FirstFragmentf = new FirstFragment(); 

    Bundle args = new Bundle(); 
    args.putString("senID", sendID); 
    f.setArguments(args); 

    return f; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    sensorID= getArguments().getString("sendID"); 

} 
+0

Не работает. Я не могу даже правильно получить доступ к фрагментам сейчас –

+0

Я забыл перерыв; в коммутаторе. Вы уверены, что создаете фрагменты правильно? – theboldbaldguy

+0

Большое спасибо, но он просто не работает вообще. –

0

Создать поле в фрагменте:

public Bundle bundle; 

и в mainactivity назначьте расслоение к

f.bundle=b; 

и удалить

Bundle bundle=getArguments(); 
0

В вашей деятельности поставил:

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

     //Actiity to Fragment 
     Bundle bundle = new Bundle(); 
     bundle.putString("test", "From Activity"); 
     // set Fragmentclass Arguments 
     TestFragment testFragment = new TestFragment(); 
     testFragment.setArguments(bundle); 
     testFragment.myTest(); 

    } 

В вашем фрагменте поставить:

public void myTest(){ 
     //Get String from Activity 
     String stringText = getArguments().getString("test"); 
     Log.d(LOG_TAG, "The String from the Activity = " + stringText); 
    } 
Смежные вопросы