我有一个使用官方facebook sdk下载facebook专辑的应用程序。最近,我更新了我的代码以合并新的FB android sdk 3.0。
我的第一个活动启动了FB身份验证,请求朋友列表,并使用意图将所选朋友的图表ID发送到第二个活动。
我没有对启动第二个活动的代码进行任何更改,但发生了android.view.windowleaked异常。所以我在第一个活动的onPause,onStop函数中调用了progress对话框的dismiss函数。然后错误就消失了。
但第二项活动仍未显示为前景。也没有例外。这是我的代码。
album_intent = new Intent();
album_intent.putExtra("id",graph_id);
album_intent.putExtra("name",selected_friend.toString());
//album_intent.setComponent(new ComponentName(Barebone_fbActivity.this, album_selector.class));
album_intent.setClass(this, album_selector.class);
album_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//Context context = getApplicationContext();
//context.startActivity(album_intent);
try
{
getApplicationContext().startActivity(album_intent);
}
catch(ActivityNotFoundException ex)
{
ex.printStackTrace();
}
我为第二个活动的onCreate方法添加了一个toast。令人惊讶的是,显示了吐司但不显示活动本身。我还检查了我的清单文件,没有做任何更改。我怀疑FB android SDK 3.0因为他们已经改变了从登录到图api请求的几乎所有内容。 请帮助找到问题。
我的应用程序中的所有活动都实现了StatusCallback。这是album_selector活动的生命周期方法。 StatusCallback的'call'方法很长,因此不包括在内。此外,第二个活动扩展了ListActivity。
@Override
public void onCreate(Bundle savedInstanceState)
{
//locks the screen in portrait mode
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Toast.makeText(this, "Voila", Toast.LENGTH_SHORT).show();
this.setVisible(true);
dialog = ProgressDialog.show(album_selector.this, "", getText(R.string.loading));
//pressing back button dismisses the progress dialog
dialog.setCancelable(true);
//get friend_name and friend_id from the intent which started this activity
Intent starting_intent = getIntent();
friend_id = starting_intent.getStringExtra("id");
friend_name = starting_intent.getStringExtra("name");
lv = getListView();
Session currentSession = Session.getActiveSession();
if(currentSession == null || currentSession.getState().isClosed())
{
Session session = Session.openActiveSession(this, true, this);
//Session session = Session.restoreSession(this, null, this, bundle);
currentSession = session;
}
if (currentSession != null && !currentSession.isOpened())
{
OpenRequest openRequest = new OpenRequest(this).setCallback(this);
if(openRequest == null)
{
openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
openRequest.setPermissions(Arrays.asList(permissions));
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
currentSession.openForRead(openRequest);
}
}
dialog.dismiss();
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
protected void onStop()
{
super.onPause();
album_selector.this.dialog.dismiss();
}
protected void onPause()
{
super.onPause();
album_selector.this.dialog.dismiss();
}
答案 0 :(得分:1)
我遇到了类似的问题,即活动正在加载和运行,但它不可见。
问题是在AndroidManifest.XML中,活动的主题定义为NoDisplay:
android:theme="@android:style/Theme.NoDisplay"
从活动中删除上述属性使其再次可见。
答案 1 :(得分:0)
查看您要进行的子活动是否在您创建的另一个程序包中。如果是这样,那就是它无法识别您的活动的原因。将其折射到您的父母活动所在的位置。就是这样。
答案 2 :(得分:0)
对于未来的用户:如果子布局具有 ConstraintLayout
而父布局具有 RelativeLayout / LinearLayout
,则子布局将不会呈现。
检查您的情况是否如此。
答案 3 :(得分:0)
我遇到了同样的问题,结果是自动填充。删除任何自动填充
android:autofillHints=""