Android 从活动切换到片段后,UI无法显示内容
我已经使用Layer(atlas for UI)SDK开发了一个消息传递功能。 如果实现是w.r.t活动,我可以在UI中看到对话列表,但在切换到活动片段后,UI显示为空。切换到fragment是必需的,因为应用程序具有使用ViewPager概念实现的导航选项卡,而消息是其中一个选项卡。 下面是我的文件,请让我知道,如果我在使用碎片时遗漏了什么 片段实现Android 从活动切换到片段后,UI无法显示内容,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我已经使用Layer(atlas for UI)SDK开发了一个消息传递功能。 如果实现是w.r.t活动,我可以在UI中看到对话列表,但在切换到活动片段后,UI显示为空。切换到fragment是必需的,因为应用程序具有使用ViewPager概念实现的导航选项卡,而消息是其中一个选项卡。 下面是我的文件,请让我知道,如果我在使用碎片时遗漏了什么 片段实现 在一个良好的调试会话之后,发现Layer Atlas SDK有一个在恢复时刷新的条件 public AtlasMessagesRecyclerV
在一个良好的调试会话之后,发现Layer Atlas SDK有一个在恢复时刷新的条件
public AtlasMessagesRecyclerView refresh() {
if (mAdapter != null) mAdapter.refresh();
return this;
}
因此,通过从ConversationListFragment onResume调用refresh方法,解决了这个问题
@Override
public void onResume() {
super.onResume();
LayerClient client = App.getLayerClient();
if (client == null) return;
if (client.isAuthenticated()) {
client.connect();
} else {
client.authenticate();
}
mConversationsList.refresh();
}
你有任何崩溃吗?@Shadab Ansari,我只在调试时看到下面的崩溃,但在运行时没有崩溃。java.lang.NullPointerException:尝试从android.support.v4.app.BackStackRecord.mAddToBackStack上的空对象引用上的字段“boolean android.support.v4.app.BackStackRecord.run”(BackStackRecord.java:740)中读取数据,因此在不进行调试的情况下运行时,你到底观察到了什么问题?在没有调试的情况下运行时,我只看到一个空屏幕。你能将xml粘贴到你有ViewPager的地方吗?
public abstract class BaseActivity extends AppCompatActivity {
private final int mLayoutResId;
private final int mMenuResId;
private final int mMenuTitleResId;
private final boolean mMenuBackEnabled;
public BaseActivity(int layoutResId, int menuResId, int menuTitleResId, boolean menuBackEnabled) {
mLayoutResId = layoutResId;
mMenuResId = menuResId;
mMenuTitleResId = menuTitleResId;
mMenuBackEnabled = menuBackEnabled;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mLayoutResId);
ActionBar actionBar = getSupportActionBar();
if (actionBar == null) return;
if (mMenuBackEnabled) actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(mMenuTitleResId);
}
@Override
public void setTitle(CharSequence title) {
ActionBar actionBar = getSupportActionBar();
if (actionBar == null) {
super.setTitle(title);
} else {
actionBar.setTitle(title);
}
}
@Override
public void setTitle(int titleId) {
ActionBar actionBar = getSupportActionBar();
if (actionBar == null) {
super.setTitle(titleId);
} else {
actionBar.setTitle(titleId);
}
}
@Override
protected void onResume() {
Log.i("###","BaseActivity-onResume");
super.onResume();
LayerClient client = App.getLayerClient();
if (client == null) return;
if (client.isAuthenticated()) {
client.connect();
} else {
client.authenticate();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(mMenuResId, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
// Menu "Navigate Up" acts like hardware back button
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
protected LayerClient getLayerClient() {
return App.getLayerClient();
}
protected ParticipantProvider getParticipantProvider() {
return App.getParticipantProvider();
}
protected Picasso getPicasso() {
return App.getPicasso();
}
}
public AtlasMessagesRecyclerView refresh() {
if (mAdapter != null) mAdapter.refresh();
return this;
}
@Override
public void onResume() {
super.onResume();
LayerClient client = App.getLayerClient();
if (client == null) return;
if (client.isAuthenticated()) {
client.connect();
} else {
client.authenticate();
}
mConversationsList.refresh();
}