Sav*_*ita 9 android android-fragments
我已经想从MainActivity启动我的RecipientFragment并将数据从MainActivity传递到Fragment.这是我实现的代码.但片段没有开始.
Bundle bundle = new Bundle();
bundle.putString(ParseConstants.KEY_FILE_TYPE, fileType);
RecipientsFragment keyfile = new RecipientsFragment();
keyfile.setArguments(bundle);
Fragment newFragment = new RecipientsFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
我还想知道如何传递intent.setData并在Fragment中获取该数据.目前我有以下代码:
RecipientFragment
mMediaUri = getActivity().getIntent().getData();
Run Code Online (Sandbox Code Playgroud)
主要活动
Intent recipientsIntent = new Intent(this, RecipientsFragment.class);
recipientsIntent.setData(mMediaUri);
Run Code Online (Sandbox Code Playgroud)
小智 34
您可以在活动中添加或替换片段.创建FrameLayout
活动布局xml
文件.
然后在您的活动中执行此操作以添加片段:
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.container,YOUR_FRAGMENT_NAME,YOUR_FRAGMENT_STRING_TAG);
transaction.addToBackStack(null);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
并替换片段做这个:
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container,YOUR_FRAGMENT_NAME,YOUR_FRAGMENT_STRING_TAG);
transaction.addToBackStack(null);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
请参阅有关向活动添加片段或在SO上关注相关问题的Android文档:
add(),replace()和addToBackStack()之间的区别
Fragment的add()和replace()方法的基本区别
add()和replace()与Fragment的生命周期之间的区别
片段是可以在活动中显示的视图组。但它需要一个容器。容器可以是任何Layout(FragmeLayout、LinearLayout等,无所谓)。
步骤1:
定义活动布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fragmentHolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
第2步:
定义片段布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<EditText
android:id="@+id/user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"/>
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Login"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
步骤3:
创建片段类
public class LoginFragment extends Fragment {
private Button login;
private EditText username, password;
public static LoginFragment getInstance(String username){
Bundle bundle = new Bundle();
bundle.putInt("USERNAME", username);
LoginFragment fragment = new LoginFragment();
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.login_fragment, parent, false);
login = view.findViewById(R.id.login);
username = view.findViewById(R.id.user);
password = view.findViewById(R.id.password);
String name = getArguments().getInt("USERNAME");
username.setText(username);
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
步骤4:
在Activity中添加片段
public class ActivityB extends AppCompatActivity{
private Fragment currentFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
currentFragment = LoginFragment.getInstance("Rohit");
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragmentHolder, currentFragment, "LOGIN_TAG")
.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
这是非常基本的代码。如果您想了解 Fragment 中的更多高级主题,则可以查看以下资源:
Woof - 以正确的方式学习片段
我的 Android Garage
小智 5
首先,你用一个意图启动活动和服务,你用片段事务启动片段。其次,您的交易没有做任何事情。将其更改为:
FragmentTransaction transaction = getFragmentManager();
transaction.beginTransaction()
.replace(R.layout.container, newFragment) //<---replace a view in your layout (id: container) with the newFragment
.commit();
Run Code Online (Sandbox Code Playgroud)
简单的方法
创建一个新的Java类
public class ActivityName extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null){
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, new Fragment_name_which_you_wantto_open()).commit();}
}
}
Run Code Online (Sandbox Code Playgroud)在您想打断电话的活动中
Intent i = new Intent(Currentactivityname.this,ActivityName.class);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)另一种方法
在您要打开片段的活动中放置框架布局
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)将此代码粘贴到您要打开片段的位置
Fragment mFragment = null;
mFragment = new Name_of_fragment_which_you_want_to_open();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frameLayout, mFragment).commit();
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
67356 次 |
最近记录: |