我无法理解为什么findFragmentByTag()在我的代码中返回null。我已经在片段onCreate()上设置了RetainInstance(true),并且正在使用getSupportFragmentManager()。findFragmentByTag(),因为它是SherlockFragmentActivity。
这是我的活动代码:
public class TedActivity extends SherlockFragmentActivity implements
TabListener, Constants {
private Tab tab;
private ActionBar actionBar;
private int currentTab;
MyTedFragment currentFrag;
private MyTedFragment previousFrag;
private static int count = 1;
private static final String TAG = TedActivity.class.getName();
private static final String FRAGMENT_PREFIX = "FRAGMENT";
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
currentTab = tab.getPosition();
currentFrag = (MyTedFragment) getSupportFragmentManager()
.findFragmentByTag(FRAGMENT_PREFIX + (currentTab + 1));
if (previousFrag != null) {
ft.hide(previousFrag);
}
if (currentFrag == null) {
Log.d(TAG, FRAGMENT_PREFIX + (currentTab + 1) + " = null");
} else {
Log.d(TAG, FRAGMENT_PREFIX + (currentTab + 1) + " != null");
ft.show(currentFrag);
}
previousFrag = currentFrag;
}
/**
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Create first Tab
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
MyTedFragment frag = new MyTedFragment();
ft.add(android.R.id.content, frag, FRAGMENT_PREFIX + count);
ft.commit();
tab = actionBar.newTab().setTabListener(this);
tab.setText("Untitled" + count);
actionBar.addTab(tab);
count++;
if (savedInstanceState != null) {
actionBar.setSelectedNavigationItem(savedInstanceState.getInt(
"tab", 0));
}
}
public boolean onCreateOptionsMenu(Menu menu) {
addMenuItem(menu, MENU_ID_NEW, R.string.menu_new,
R.drawable.ic_action_new).setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS);
;
return true;
addMenuItem(menu, MENU_ID_OPEN, R.string.menu_open,
R.drawable.ic_action_open).setShowAsAction(
MenuItem.SHOW_AS_ACTION_IF_ROOM);
;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("tab", getSupportActionBar()
.getSelectedNavigationIndex());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
currentFrag = (MyTedFragment) getSupportFragmentManager()
.findFragmentByTag(FRAGMENT_PREFIX + count);
if (currentFrag != null/* && !currentFrag.isDetached() */) {
currentFrag.mWarnedShouldQuit = false;
switch (item.getItemId()) {
case MENU_ID_NEW:
FragmentTransaction ft = getSupportFragmentManager()
.beginTransaction();
MyTedFragment frag = new MyTedFragment();
ft.add(android.R.id.content, frag, FRAGMENT_PREFIX + count);
ft.commit();
tab = actionBar.newTab().setTabListener(this);
tab.setText("Untitled" + count);
actionBar.addTab(tab);
actionBar.setSelectedNavigationItem(actionBar
.getNavigationItemCount() - 1);
count++;
// TODO mFragment.newContent();
return true;
case MENU_ID_OPEN:
currentFrag.openFile();
break;
}
}
return super.onOptionsItemSelected(item);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
这是我的片段代码:
public class MyTedFragment extends SherlockFragment implements OnClickListener, KeyListener {
private EditText mEditor;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
// editor
mEditor = (EditText) getActivity().findViewById(R.id.editor);
mEditor.addTextChangedListener(this);
mEditor.updateFromSettings();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.layout_editor, null);
}
....
....
}
可能是因为您正在用ft.attach(frag);
重新附加片段。检查留档:http://developer.android.com/reference/android/app/FragmentTransaction.html#attach(android.app.片段)
当我在Android中放置空检查时,代码检查建议我添加方法。当我应用此检查时,代码检查不再警告。那么哪个更好呢? 我已经经历了这个问题。根据我的理解(我可能错了),无论如何都会抛出NullPointerException。
问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:
问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方
我想在下面返回JSON。 {“名字”:“杰基”} 新来的春靴在这里。1天大。有没有合适的方法可以做到这一点?
问题内容: 我创建了一个自定义错误类型来包装错误,以便更轻松地在Golang中进行调试。当有打印错误时它可以工作,但是现在引起了恐慌。 演示版 当我调用一个函数时,它不会返回错误,我仍然应该能够包装该错误。 预期的行为是,如果错误为nil,则应该简单地忽略它,不幸的是,它会做相反的事情。 我希望它能打印出来。而是即使错误为nil也会打印。 问题答案: 正在将err变量与nil进行比较,但实际上它是
下面是我的控制器代码:- 以下是我的服务代码:- 下面是我的存储库代码:-