关于FragmentActivity获取getActivity()为nulld饿以及fragment的变量为null的问题


这几天在做FragmentTabHost+FragmentActivity+多个Fragment做主页面框架时会偶尔出现fragmentgetActivity() 获取为null的情况,下面我就来还原场景。

1、在FragmentActivity中初始化并调用RefreshMainUI()

a、在FragmentActivity中初始化

private void initTab() {

//开始的这两行就是罪魁祸首。

chatHistoryFragment = new ChatHistoryFragment();
contactListFragment = new HXContactlistFragment();


mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTextviewArray = getResources().getStringArray(R.array.menu);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.getTabWidget().setDividerDrawable(android.R.color.white);
// 将Tab按钮添加进Tab选项卡中
for (int i = 0; i < mImageViewArray.length; i++) {
// 为Tab按钮设置图标、文字和内容
TabSpec tabSpec = mTabHost.newTabSpec(mTextviewArray[i])
.setIndicator(getTabItemView(i));
mTabHost.addTab(tabSpec, mClass[i], null);
}

mTabHost.setCurrentTab(tab1);
}

b、在activity中监听联系人的变化和会话列表的变化后来调用此方法刷新该两个页面的数据

private void RefreshMainUI() {

try {
if (chatHistoryFragment != null) {
System.out.println("chatHistoryFragment 不为空");
} else {
System.out.println("chatHistoryFragment空");
}
contactListFragment.refresh();
chatHistoryFragment.refresh();
} catch (Exception e) {
e.printStackTrace();
}

}

2、在tab1的HXContactlistFragment中有这么个方法,主要是来刷新联系人列表的。

public void refresh() {
try {
if (getActivity() == null) {
return;
}
// 可能会在子线程中调到这方法
getActivity().runOnUiThread(new Runnable() {
public void run() {
getContactList();
adapter.notifyDataSetInvalidated();
}
});
} catch (Exception e) {
e.printStackTrace();
}

}

在getActivity()的时候总是为null,并且adapter也是为null。


3、后来修改了如下:在FragmentActivity中修改RefreshMainUI来刷新tab0和tab1

private void RefreshMainUI(){

HXContactlistFragment fragment = (HXContactlistFragment) getSupportFragmentManager()
.findFragmentByTag(mTextviewArray[1]);
if (null != fragment) {
fragment.refresh();
}
ChatAllHistoryFragment fragment0 = (ChatAllHistoryFragment) getSupportFragmentManager()
.findFragmentByTag(mTextviewArray[0]);
if (null != fragment0) {
fragment0.refresh();
}

}

实际上我new ChatAllHistoryFragment的实例和(ChatAllHistoryFragment) getSupportFragmentManager()
.findFragmentByTag(mTextviewArray[0])这个实例是两个fragment,所以导致了用最初的方式无论如何获取fragment里面的变量都是为null的原因。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值