采用Fragment.setArguments(Bundle bundle)来传递参数,而不用构造函数

google官方推荐用setArgument来传参而不是用构造函数。

因为当切换横竖屏时,Fragment会调用自己的无参构造函数,那么在构造函数传参就会失效。

public class FramentTestActivity extends ActionBarActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//切换横竖屏后savedInstanceState就不为null,所以只有第一次进来时才会调用,如果不判断的话,切换横竖屏时又会在原fragment基础上又new 一个Fragment,这样就有2个fragment重叠了。

if (savedInstanceState == null) {

getSupportFragmentManager().beginTransaction()

.add(R.id.container, new TestFragment("param")).commit();

}

}

public static class TestFragment extends Fragment {

private String mArg = "non-param";

public TestFragment() {

Log.i("INFO", "TestFragment non-parameter constructor");

}

public TestFragment(String arg){

mArg = arg;

Log.i("INFO", "TestFragment construct with parameter");

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.fragment_main, container,

false);

TextView tv = (TextView) rootView.findViewById(R.id.tv);

tv.setText(mArg);

return rootView;

}

}

}

时间: 2024-11-10 01:25:53

采用Fragment.setArguments(Bundle bundle)来传递参数,而不用构造函数的相关文章

Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数(转)

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢?为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 public class FramentT

Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢? 为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 1 public class Frame

Android开发之Fragment传递参数的几种方法

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢?为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 public class FramentT

Fragment.setArguments()

在我们平常开发的时候Fragment是经常使用的,而我们创建一个Fragment对象的时候一般都会 通过 new Fragment()构造方法来实现,如果要传递参数我们一般会重载构造方法,例如 new Fragment(Parameter p). 但是这样的做法是不被提倡的,如果你重载构造函数之后,系统会有一个warning,如下: Avoid non-default constructors in fragments: use a default constructor plus Fragme

Fragment.setArguments()的初衷。

简介 在我们平常开发的时候Fragment是经常使用的,而我们创建一个Fragment对象的时候一般都会 通过 new Fragment()构造方法来实现,如果要传递参数我们一般会重载构造方法,例如 new Fragment(Parameter p). 但是这样的做法是不被提倡的,如果你重载构造函数之后,系统会有一个warning,如下: Avoid non-default constructors in fragments: use a default constructor plus Fra

android中传递复杂参数,Activity之间通过Intent使用bundle,fragment之间和Activityty通过setArguments使用bundle

在Android开发中,Activity之间通过Intent使用bundle,fragment之间和Activityty通过setArguments使用bundle,对于一些简单的参数传递比较简单,而且方式也有多种,这个就不介绍了.在这里介绍一下复杂的参数传递,比如传递集合ArrayList,对象ArrayList<Object>. 无论是Activity之间参数传递,还是Fragment之间参数传递,或者是Activity与Fragment之间,都要使用Bundle,方式基本相同.Bundl

Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead

“Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle)instead” 出現這個問題時 使用Window->Android->Lint Error Checking 在 Correctness類別裡,找到ValidFragment ,設定為Ingore就可以了. 转载:http://www.dotblogs.com.tw/newmonke

Activity间用Intent和Bundle传递参数

传递方: //点击btn_sub传递 fieldHeight.getText()和 fieldWeight.getText() private void setListeners()    {     btn_sub.setOnClickListener(calrBMI);     }    private OnClickListener calrBMI = new OnClickListener()    {     public void onClick(View v)     { Inte

17_Android中Broadcast详解(有序广播,无序广播)最终广播,Bundle传递参数,传递参数的时候指定权限

?? 1  Broadcast是Android中的四大组件之一,他的用途很大,比如系统的一些广播:电量低.开机.锁屏等一些操作都会发送一个广播. 2  广播被分为两种不同的类型:"普通广播(Normalbroadcasts)"和"有序广播(Ordered broadcasts)".普通广播是完全异步的,可以在同一时刻(逻辑上)被所有广播接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播:然后有序广