rha*_*ter 1 android in-app-billing
我有一个首选项屏幕,向用户显示一个禁用广告的复选框.当用户首次点击此选项时,会向他们显示"应用内结算"购买选项以停用广告.
我在这里遇到的问题是我无法看到任何方法将onActivityResult回调到片段中.
所以我有一个PreferenceActivity加载PreferenceFragment(我似乎无法获得参考).在App Billing中,需要调用startIntentSenderForResultFragments不具有的活动.
当我启动购买流程时startIntentSenderForResult,onActivityResult会调用Activity ,但我需要在片段中使用它.
因为我使用以下内容将PreferenceFragment加载到PreferenceActivity中,所以我认为我不能获得对Fragment的引用来传递调用.
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.layout.preferences_headers, target);
}
@Override
public Intent getIntent() {
final Intent modIntent = new Intent(super.getIntent());
modIntent.putExtra(EXTRA_SHOW_FRAGMENT, SyncPreferencesFragment.class.getName());
modIntent.putExtra(EXTRA_NO_HEADERS, true);
return modIntent;
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?我不想分开我所有的购买逻辑,那么如何让我的Fragment onActivityForResult接听电话呢?
原始启动请求必须来自FragmentAndroid,以便将结果传回给相同的人Fragment.如果Activity启动请求,则结果本身并不会传递给Fragment可能附加到管理器的每个请求.除此之外,您还必须确保onActivityResult()在顶级中覆盖if Activity,同时调用super.onActivityResult(),否则消息将不会传递给Fragment.
IAB的问题是你给出了一个PendingIntent而不是标准来触发,即使你可以在那里移动代码,也Intent没有方法Fragment可以触发初始操作.为了保持原样,你可能需要做一些调整.你可以做的一件事是onAttach()在你的方法中使用自定义界面,Fragment并使用它来让Fragment自己交给自己Activity.就像是:
public class SyncPreferencesActivity extends PreferenceActivity
implements SyncPreferencesFragment.OnAttachCallback {
SyncPreferencesFragment mTargetFragment;
@Override
public void onAttachSyncFragment(SyncPreferencesFragment fragment) {
mTargetFragment = fragment;
}
}
Run Code Online (Sandbox Code Playgroud)
...对应的一些补充Fragment......
public class SyncPreferencesFragment extends PreferenceFragment {
public interface OnAttachCallback {
public void onAttachSyncFragment(SyncPreferencesFragment fragment);
}
@Override
public void onAttach(Activity activity) {
try {
OnAttachCallback callback = (OnAttachCallback) activity;
callback.onAttachSyncFragment(this);
} catch (ClassCastException e) {
throw new ClassCastException("You Forgot to Implement the Callback!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
有了这样的东西,至少你有一个对实例的引用,所以你可以转发结果或其他任何可能需要的东西.如果你想要超级干净,你也可以实现一个匹配的"分离",清除中的引用Activity.
| 归档时间: |
|
| 查看次数: |
2277 次 |
| 最近记录: |