gpt4 book ai didi

android - 按标签获取 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:04 26 4
gpt4 key购买 nike

我正在使用 FragmentPagerAdapter 创建具有不同 fragment 的多页面 UI。我想做的是使用 fragment 的位置找到 fragment 。

我已经应用查找 fragment 名称标签的方法并使用 .FindFragmentbyTag() 但 .FindFragmentbyTag 总是返回空值。该结构似乎是正确的,所以我不确定为什么会得到空值,请仔细阅读并感谢您的帮助。

这是代码

MainActivity.java
public void onCreate(Bundle savedInstanceState) {
this.getSupportFragmentManager();
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MainActivity.instance=this;
//Initialize pager
vpPager = (ViewPager)findViewById(R.id.mypager);
pagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
vpPager.setAdapter(pagerAdapter);
this.mapFragment = (MapFragment)this.findFragmentByPosition(0);
this.drFragment = (DRFragment)this.findFragmentByPosition(1);
this.sensorFragment = (SensorFragment)this.findFragmentByPosition(2);
......
}

protected Fragment findFragmentByPosition(int position) {
int pagerid = this.vpPager.getId();
long pagerAdapterid = this.pagerAdapter.getItemId(position);
return getSupportFragmentManager().findFragmentByTag("android:switcher:" + pagerid + ":" + pagerAdapterid + "");
}

MyPagerAdapter.java
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.View;

public class MyPagerAdapter extends FragmentPagerAdapter {
private static final String TAG = "TM_PageAdapter";
private static int numItems = 3;

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

public int getCount() {
return numItems;
}

@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return MapFragment.newInstance(0, "Map Information");
case 1:
return DRFragment.newInstance(1, "DR Information");
case 2:
return SensorFragment.newInstance(2, "Sensor Information");
default:
return null;
}
}

@Override
public CharSequence getPageTitle(int position) {
switch(position){
case 0:
return "Map Information";
case 1:
return "DR Information";
case 2:
return "Sensor Information";
default:
return null;
}
}

public static String makeFragmentName(int viewId, int index) {
return "android:switcher:" + viewId + ":" + index;
}


@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);

}

@Override
public Parcelable saveState() {
return null;
}

这是 .newInstance 的代码之一:

public static MapFragment newInstance(int position, String title){
MapFragment mapFragment = new MapFragment();
Bundle args = new Bundle();
args.putInt("current_page", 0);
args.putString("page_tile", "Map Information");
mapFragment.setArguments(args);
return mapFragment;
}

最佳答案

在 findFragmentByPosition 中,您在查找 fragment 时没有使用索引:

getSupportFragmentManager().findFragmentByTag("android:switcher:" + pagerid + ":" + pagerAdapterid + "");

第二个应该是索引,而不是 pagerAdapterId。所以正确的代码是:

getSupportFragmentManager().findFragmentByTag("android:switcher:" + pagerid + ":" + position);

也不需要连接最后一个空字符串。

关于android - 按标签获取 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24798145/

26 4 0