gpt4 book ai didi

java - 如何访问类的目的实例并传递数据?

转载 作者:行者123 更新时间:2023-12-02 04:33:50 25 4
gpt4 key购买 nike

示例代码位于 https://github.com/chrisbanes/cheesesquare 。我创建了四个 CheeseListFragment 实例。我无法理解如何访问该类的第三个实例并传递数据?特别是第三个

public class MainActivity extends AppCompatActivity implements CheeseListFragment.OnDataPass {
Adapter adapter;

...
adapter = new Adapter(getSupportFragmentManager());

for (int i=0; i<4; i++){
adapter.addFragment(new CheeseListFragment(), items[i]);
}
...

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}

@Override
public void onPageSelected(int position) {
onDataPass(String.valueOf(position)); // how send data to third instance of CheeseListFragment





static class Adapter extends FragmentPagerAdapter {
private final List<Fragment> mFragments = new ArrayList<>();
private final List<String> mFragmentTitles = new ArrayList<>();



public Adapter(FragmentManager fm) {
super(fm);
}

public void addFragment(Fragment fragment, String title) {
mFragments.add(fragment);
mFragmentTitles.add(title);
}

@Override
public Fragment getItem(int position) {


return mFragments.get(position);
}

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

@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitles.get(position);
}
}
}




public class CheeseListFragment extends Fragment {

List<News> lnews;
private RecyclerViewAdapter mRecyclerviewAdapter;
OnDataPass dataPasser;

...
protected String[] mDataset;



public interface OnDataPass {
public void onDataPass(String data);
}

@Override
public void onAttach(Activity a) {
super.onAttach(a);
dataPasser = (OnDataPass) a;

}
public void passData(String data)
dataPasser.onDataPass(data);
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Fragment fragment = adapter.getItem(2);
CheeseListFragment cheesyFragment = (CheeseListFragment) fragment;
cheesyFragment.onDataPass(...) // how pass data?

最佳答案

您可以使用适配器中的getItem()方法获取第三个 fragment 。在您的情况下,通过调用 adapter.getItem(2)

假设您不仅仅想添加按位置查找 fragment ,您还可以向适配器添加一个附加方法以按标题获取 fragment 。

public Fragment getFragmentByTitle(String title) {
if (!mFragmentTitles.contains(title))
return null;

return mFragments.get(mFragmentTitles.indexOf(title));
}

至于将数据传递给 CheeseListFragment,您不必像示例代码中那样使用接口(interface),只需将公共(public)方法 onDataPass() 添加到 CheeseListFragment 类并在获得时调用该方法 fragment 。

关于java - 如何访问类的目的实例并传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31086475/

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