我遇到了问题,我希望在创建活动时,将我的活动extraData
中的一个参数VenteActivity
发送到他的一个片段PageAdjuFragment
。
我在此活动中有3个片段用于在它们之间滑动,目前我只在PageAdjuFragment
上工作。
我在stackoverflow上看到如何使用newinstantiate()
在PageAdjuFragment
的新实例的参数中传递一个包,但这对我不起作用:(。
你可以在这里看到我的活动:
public class VenteActivity extends FragmentActivity {
private PagerAdapter mPagerAdapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.viewpager2);
creationPage();
//Recovery
Intent sender=getIntent();
String extraData=sender.getExtras().getString("message");
Log.v("nivyolo",extraData);//this is the argument which i would send
//Sending
PageAdjuFragment.newInstance(extraData); // the problem start here
}
public void creationPage() {
// Creation of the list
List<Fragment> fragments = new Vector<Fragment>();
// Add Fragments in a list
fragments.add(Fragment.instantiate(this,PageOffreFragment.class.getName()));
fragments.add(Fragment.instantiate(this,PageAdjuFragment.class.getName()));
fragments.add(Fragment.instantiate(this,PageNewPartFragment.class.getName()));
// Creation of theadapter
this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager2);
// Affectation on the ViewPager
pager.setAdapter(this.mPagerAdapter);
}
}
我希望将参数传递给创建
的片段 public class PageAdjuFragment extends Fragment {
public static PageAdjuFragment newInstance(String vente) {
PageAdjuFragment myFragment = new PageAdjuFragment();
Bundle args = new Bundle();
args.putString("vente", vente);
myFragment.setArguments(args);
return myFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
final View v=inflater.inflate(R.layout.page_adju_layout, container, false);
final Button b=(Button)v.findViewById(R.id.btconf);
final RadioGroup radiopmt = (RadioGroup) v.findViewById(R.id.radiopmt);
final RadioButton rb1 = (RadioButton)v.findViewById(R.id.rb1);
final RadioButton rb2 = (RadioButton)v.findViewById(R.id.rb2);
final AutoCompleteTextView tv1 = (AutoCompleteTextView)v.findViewById(R.id.actv1);
final AutoCompleteTextView tv2 = (AutoCompleteTextView)v.findViewById(R.id.actv2);
final EditText tv3 = (EditText)v.findViewById(R.id.edt);
////START PROBLEM////////
String vente;
// Recovery of the parameter
Log.v("adju","before recup");
Bundle arg = getArguments(); // the problem
Log.v("adju","after recup");
if (arg == null) {// all the time arg is null
Log.v("args","arguments is null ");
vente = "yolo";
} else {
Log.v("args2","arguments not null ");
vente= arg.getString("vente");
Log.v("nivyolobonnepage",vente);
}
tv3.setText(vente); //just a test
////END PROBLEM////////
//Data adaptation on TextAuto
List<String> OBJET = null;
List<String> PARTI = null;
try {
OBJET = InitObjet();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
PARTI = InitPart();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_dropdown_item_1line, OBJET);
tv1.setAdapter(adapter);
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_dropdown_item_1line, PARTI);
tv2.setAdapter(adapter2);
Log.v("papaouté","ici"); //Listerner Boutton Confirmer
b.setOnClickListener(new OnClickListener() {...});
//Listener on the widget value's changes
tv1.addTextChangedListener(new TextWatcher() {...});
tv2.addTextChangedListener(new TextWatcher() {...});
tv3.addTextChangedListener(new TextWatcher() {...});
radiopmt.setOnCheckedChangeListener(new OnCheckedChangeListener() {...});
return v;
}
//Create the List of object
public List<String> InitObjet() throws IOException{...}
//Create the List of participant
public List<String> InitPart() throws IOException {...}
//Write in the CSV FILE "achat"
public void ecrire() throws IOException{...}
}
最后是页面适配器
public class MyPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragments;
//On fournit à l'adapter la liste des fragments à afficher
public MyPagerAdapter(FragmentManager fm, List fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int pos) {
return this.fragments.get(pos);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
和wiewpager2.xml
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/viewpager2">
</android.support.v4.view.ViewPager>
logCat
05-14 10:13:51.919: V/nivyolo(10005): vente1
05-14 10:13:52.169: V/adju(10005): before recup
05-14 10:13:52.169: V/adju(10005): after recup
05-14 10:13:52.169: V/args(10005): arguments is null
05-14 10:13:52.209: V/papaouté(10005): ici
参数arg
始终为空
答案 0 :(得分:0)
PageAdjuFragment.newInstance(extraData); // the problem start here
是的,你有问题,因为你正在实例化一个片段并且没有使用它。
public class VenteActivity extends FragmentActivity {
private PagerAdapter mPagerAdapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.viewpager2);
creationPage();
}
public void creationPage() {
// Creation of the list
List<Fragment> fragments = new Vector<Fragment>();
// Add Fragments in a list
fragments.add(Fragment.instantiate(this,PageOffreFragment.class.getName()));
//Recovery
Intent sender=getIntent();
String extraData=sender.getExtras().getString("message");
Log.v("nivyolo",extraData);//this is the argument which i would send
//Sending
Fragment frag = PageAdjuFragment.newInstance(extraData); // no problem anymore
fragments.add(frag);
fragments.add(Fragment.instantiate(this,PageNewPartFragment.class.getName()));
// Creation of theadapter
this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager2);
// Affectation on the ViewPager
pager.setAdapter(this.mPagerAdapter);
}
}
那就是它。 : - )
你为什么要使用Fragment.instantiate()?它与使用新的Fragment()相同,但使用Java Reflection增加了性能损失(比使用普通构造函数长约2倍)。如果定义了静态方法,最好使用空构造函数或Fragment.newInstance()。