gpt4 book ai didi

android - 在 Fragment.OnCreateView() 之外获取 fragment Activity

转载 作者:搜寻专家 更新时间:2023-11-01 08:44:43 25 4
gpt4 key购买 nike

我有一个带有 TableLayoutFragment。表中的数据来自 SQLite 数据库。 SQLite 数据库是从 MainActivity 中的 AsyncTask 中的 RESTful web 服务填充的。 Fragment 必须等待任务完成才能填充表。 Fragment 监听要调用的任务 onPostExecute() 方法。如果是,则调用 Fragment 中的方法 onLoadAndStoreComplete。这一切都有效。

不起作用的是我需要 fragment Activity 才能在 onLoadAndStoreComplete 中创建新的 TableRowsTextViews 我可以'不明白。

我试过:
- 创建一个类成员 fragmentActivity 并在 onCreateView() 中分配,但是当它到达 onLoadAndStoreComplete() 时,它为空。< br/>- 在 onLoadAndStoreComplete() 中再次调用 this.getActivity(),但它返回 null。

如何获取 fragment Activity ?

MyFragment.java:

public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {
fragmentActivity = this.getActivity(); // return value is valid
...
}

@Override
public void onLoadAndStoreComplete() {

fragmentActivity = this.getActivity(); // returns null
...
}

来自 MainActivity.java(扩展 ActionBarActivity)

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

Resources resources = getResources();
String[] tabTitleArray = { resources.getString(R.string.first_fragment),
resources.getString(R.string.second_fragment),
resources.getString(R.string.help_fragment) };

viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getSupportActionBar();
mAdapter = new TabsPagerAdapter(this.getSupportFragmentManager());

viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

for (String tab_name : tabTitleArray) {
actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
}

// On swiping the ViewPager, select the respective tab
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position) ;// on changing the page, make respected tab selected
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});

String url = "http://myrestfulwebservice";
Fragment secondFragment = mAdapter.getItem(SECOND_TAB);
new LoadAndStoreDataTask((OnLoadAndStoreCompleteListener)secondFragment).execute(url);
}

} // end OnCreate

TabsPagerAdapter.java

public class TabsPagerAdapter extends FragmentPagerAdapter {

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

@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new FirstFragment();
case 1:
return new SecondFragment();
case 2:
return new HelpFragment();
}

return null;
}

@Override
public int getCount() {
return 3; // get item count - equal to number of tabs
}

public static void setTabColor(TabHost tabhost) {
for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) {
tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); //unselected
}
tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected
}

}

最佳答案

我还没有测试过这个,但在我看来它会起作用。

TabsPagerAdapterMyFragment 的构造函数添加一个 Context 参数。

像这样:

TabsPagerAdapter.java:

public class TabsPagerAdapter extends FragmentPagerAdapter {

private Context mCtx;

public TabsPagerAdapter(FragmentManager fragmentManager, Context context) {
super(fragmentManager);
mCtx = context;
}

@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new FirstFragment(mCtx);
case 1:
return new SecondFragment(mCtx);
case 2:
return new HelpFragment(mCtx);
}

return null;
}

@Override
public int getCount() {
return 3; // get item count - equal to number of tabs
}

public static void setTabColor(TabHost tabhost) {
for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) {
tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); //unselected
}
tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected
}

}

主要 Activity .java:

  mAdapter = new TabsPagerAdapter(this.getSupportFragmentManager(), this);

MyFragment.java(在 FirstFragmentSecondFragmentHelpFragment 中执行此操作):

public static class MyFragment extends Fragment {

private Context fragmentActivity ;

public MyFragment(Context context){
fragmentActivity = context;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//.........
return rootView;
}

@Override
public void onLoadAndStoreComplete() {

//do something with fragmentActivity

}
}

关于android - 在 Fragment.OnCreateView() 之外获取 fragment Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29569170/

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