gpt4 book ai didi

android - 如何在 Android 中用新的 Fragment 完全替换 View Pager View

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:13:43 26 4
gpt4 key购买 nike

我有以下 xml 文件:

  <android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

我在 View 寻呼机中有三个 fragment 。在其中一个 fragment 中,我正在尝试使用此代码启动一个新 fragment :

FragmentTransaction trans = getFragmentManager()
.beginTransaction();
trans.replace(R.id.pager, new SubscriptionFragment());
trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
trans.addToBackStack(null);

trans.commit();

我能够成功地替换 ViewPager 的现有 fragment ,但这并不能达到我的目的,我想做的是不替换 viewPager 中已经存在的现有 fragment ,而是删除 View 寻呼机本身从 View 中启动一个新的 fragment ,这样顶部的选项卡就不再可见,ViewPager 就会离开 View 。当我使用 Intent 启动新 Activity 时,这会起作用。但不适用于 fragment 。

已编辑:

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, new MainFragment()).commit();
}


}

主要 fragment :

public class MainFragment extends Fragment {

FragmentPagerAdapter adapterViewPager;
ViewPager viewPager;
String title[] = {"Services", "You", "History"};

// TODO: Rename and change types and number of parameters
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
/* Inflate the layout for this fragment */
View view = inflater.inflate(R.layout.fragment_view_pager, container, false);




/*************************************/
//CALLING HISTORY API

// loadSubscriptions();

return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

ViewPagerAdapter mAdapter = new ViewPagerAdapter(getFragmentManager());

ViewPager mPager = (ViewPager) getView().findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}

public static class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int num) {
if (num == 0) {
return new ServicesFragment();
} else {
return new HistoryFragment();
}
}

@Override
public int getCount() {
return 2;
}
}
}

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

</FrameLayout>

fragment_view_pager.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

在 servicefragment 中:我正在使用 openig 新 fragment :

physiotherapyView.setOnClickListener(new View.OnClickListener() {





@Override

public void onClick(View view) {

FragmentTransaction trans = getFragmentManager()
.beginTransaction();
/*
* IMPORTANT: We use the "root frame" defined in
* "root_fragment.xml" as the reference to replace fragment
*/
trans.replace(R.id.pager, new SubscriptionFragment());

/*
* IMPORTANT: The following lines allow us to add the fragment
* to the stack and return to it later, by pressing back
*/
trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
trans.addToBackStack(null);

trans.commit();

}

});

最佳答案

以下是向 View 寻呼机添加或从 View 寻呼机移除 fragment 的完整代码。因为这只是一个演示,所以我只使用了一个 textView,并且添加的每个 fragment 都会有一个随机颜色。单击一个按钮,您可以添加任意数量的 fragment 。单击页面,您可以将其从 View Pager 中删除。您可以通过向右或向左滑动来在 View Pager 中从一个页面移动到另一个页面。

主 Activity .java

import android.graphics.Color;
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.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.Button;
import java.util.ArrayList;
import java.util.Random;

public class MainActivity extends FragmentActivity {

private MyPagerAdapter mpg;
private ArrayList<MyFragment> fragmentlist = new ArrayList<>();
public FragmentManager fmr = getSupportFragmentManager();

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

final ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
mpg = new MyPagerAdapter(fmr,fragmentlist);
pager.setAdapter(mpg);

for (int q = 0; q < 5; q++) {
int r = new Random().nextInt(100) + 155;
int g = new Random().nextInt(100) + 155;
int b = new Random().nextInt(100) + 155;
fragmentlist.add(MyFragment.newInstance(q, "Page number: " + (q + 1), Color.rgb(r, g, b)));
mpg.notifyDataSetChanged();
}

Button B1 = (Button) findViewById(R.id.button);
B1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

int r = new Random().nextInt(100) + 155;
int g = new Random().nextInt(100) + 155;
int b = new Random().nextInt(100) + 155;
int count = mpg.getCount();
fragmentlist.add(MyFragment.newInstance(count, "Page number: " + (count+1), Color.rgb(r, g, b)));
mpg.notifyDataSetChanged();

}
});
}

public void delete(int pos) {

int i = 0;
while (i <= fragmentlist.size()) {
if (pos == fragmentlist.get(i).getPosition()) break;
i++;

}

fragmentlist.remove(i);
mpg.notifyDataSetChanged();
}

public class MyPagerAdapter extends FragmentStatePagerAdapter {

private ArrayList<MyFragment> fragmentList;
public MyPagerAdapter(FragmentManager fm, ArrayList<MyFragment> f) {
super(fm);
this.fragmentList = f;
}

@Override
public Fragment getItem(int pos) {
return fragmentlist.get(pos);
}

@Override
public int getCount() {
return fragmentlist.size();
}

@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
}

MyFragment.java

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;

import java.util.List;

public class MyFragment extends Fragment {

int pos;

@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.f_1, container, false);
pos = getArguments().getInt("num");
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Log.v("MainActivity", "Deleting at pos - " + pos);
MainActivity activity = (MainActivity) getActivity();
activity.delete(pos);
}
});

TextView tv = (TextView) v.findViewById(R.id.tvFragFirst);
FrameLayout fl = (FrameLayout) v.findViewById(R.id.frame_layout);
tv.setText(getArguments().getString("msg"));
fl.setBackgroundColor(getArguments().getInt("colour"));
return v;
}

public int getPosition() {
return pos;
}

public static MyFragment newInstance(int num,String text,int clr) {

MyFragment f = new MyFragment();
Bundle b = new Bundle();
b.putString("msg", text);
b.putInt("colour", clr);
b.putInt("num",num);
f.setArguments(b);
return f;
}
}

和 xml.files,

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.shakthivels.assingment10.MainActivity"
android:id="@+id/r_v"
>

<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ADD a fragment"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />

</RelativeLayout>

f_1.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/av"
>

<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:id="@+id/frame_layout">

<TextView
android:id="@+id/tvFragFirst"
android:layout_width="203dp"
android:layout_height="127dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="26sp"
android:text="TextView"
android:layout_gravity="center"
android:textColor="#000000" />

</FrameLayout>
</RelativeLayout>

Already Existing Fragment 1 Newly added Fragment to the view Pager 2

关于android - 如何在 Android 中用新的 Fragment 完全替换 View Pager View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30910770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com