我知道片段的视图层次结构必须在onCreateView中膨胀,但onCreateView还有什么其他功能可以等待onActivityCreated?我当前的实现对所有内容使用单独的活动,典型的活动在其onCreate方法中完成大部分工作,包括膨胀视图,设置内容视图,使用数据初始化各种小部件,设置监听器等.
那么这可能会全部转移到onCreateView上,还是应该将某些函数放入onActivityCreated方法呢?
lifecycle android android-lifecycle android-fragments android-activity
我不知道何时使用onCreate()或onCreateView().
我使用过onCreate()和onCreateView()生命周期方法.我认为onCreate()对于Activity和onCreateView()Fragment.但我不确定.我可以onCreate()在Fragment中使用LifeCycle方法吗?我希望有人可以帮助我!
android fragment oncreate android-fragments android-activity
我正在开发一个应用程序,该应用程序执行oauth2身份验证以前的工作,但遗憾的是不再有效.据我所知(但不是100%肯定)代码没有任何变化,所以我不知道为什么它不再起作用.
该应用会创建一个webview并从我们的服务器加载一个网址,该网址将其重定向到谷歌以对此网址进行身份验证(只是更改了客户端ID和我的域名):
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=1234567890-XXXXXXX.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Fexample.com%3A5000%2Fchannel%2Fgmail%2Fcallback&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly&access_type=offline
Run Code Online (Sandbox Code Playgroud)
立即将其重定向到:
https://accounts.google.com/ServiceLogin?passive=1209600&continue=https://accounts.google.com/o/oauth2/auth?access_type%3Doffline%26scope%3Dhttps://www.googleapis.com/auth/userinfo.email%2Bhttps://www.googleapis.com/auth/gmail.readonly%26response_type%3Dcode%26redirect_uri%3Dhttp://example.com:5000/channel/gmail/callback%26client_id%3D123456789-XXXXX.apps.googleusercontent.com%26hl%3Dnl%26from_login%3D1%26as%3D-2178738b5063e716<mpl=popup&oauth=1&sarp=1&scc=1
Run Code Online (Sandbox Code Playgroud)
我们的iOS应用程序使用相同的系统,它就像一个魅力.所以我们的服务器实现没有任何问题.在webview重定向到谷歌后,它会自动返回到应用程序而不显示任何谷歌屏幕.我正在使用以下代码打开webview:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_browser_webview, container, false);
webView = (WebView) view.findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.wtf("ERROR", description + " " + failingUrl);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.wtf("WEBVIEW URL", url);
if (url.contains(Api.API_ENTER_POINT)) {
// We never actually get here
getActivity().finish();
}
return false; //Allow WebView to …Run Code Online (Sandbox Code Playgroud) 这是我的片段的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.thenewjonathan.foodtracker.fragments.FoodItemDisplay"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="50dp"
android:textStyle="bold"
android:text="blank"
android:id="@+id/foodItemNameView"
android:gravity="center"
android:layout_gravity="top|left|center"
android:textAlignment="center"/>
<ImageView
android:contentDescription="@string/foodPicture"
android:layout_width="241dp"
android:layout_height="241dp"
android:layout_gravity="left|center_vertical"
android:background="@color/material_blue_grey_800"
android:layout_below="@id/foodItemNameView"
android:id="@+id/foodPic"
/>
<RelativeLayout
android:layout_width="140dp"
android:layout_height="241dp"
android:layout_alignParentRight="true"
android:layout_below="@id/foodItemNameView"
android:layout_gravity="end|center_vertical"
android:gravity="center"
android:id="@+id/checkBoxGroup"
>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Monday"
android:id="@+id/mondayBox"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tuesday"
android:id="@+id/tuesdayBox"
android:layout_below="@id/mondayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wednesday"
android:id="@+id/wednesdayBox"
android:layout_below="@id/tuesdayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Thursday"
android:id="@+id/thursdayBox"
android:layout_below="@id/wednesdayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Friday"
android:id="@+id/fridayBox"
android:layout_below="@id/thursdayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Saturday"
android:id="@+id/saturdayBox"
android:layout_below="@id/fridayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content" …Run Code Online (Sandbox Code Playgroud) java android intellij-idea android-fragments fragmentmanager
我已经写了很长时间的Android应用程序,但现在我遇到了一个我从未想过的问题.这是关于Android的生命周期Activitys,并Fragments在有关的配置更改.为此,我用这个必要的代码创建了一个小应用程序:
public class MainActivity extends FragmentActivity {
private final String TAG = "TestFragment";
private TestFragment fragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getSupportFragmentManager();
fragment = (TestFragment) fm.findFragmentByTag(TAG);
if (fragment == null) {
fragment = new TestFragment();
fm.beginTransaction().add(R.id.fragment_container, fragment, TAG).commit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码TestFragment.需要注意的是我打电话setRetainInstance(true);的onCreate方法,这样的片段没有在配置更改后recrated.
public class TestFragment extends Fragment implements View.OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater li, …Run Code Online (Sandbox Code Playgroud) android android-lifecycle android-fragments android-activity
我有两个 ViewModel。一个仅在 Fragment 中使用,另一个是来自 Activity 的共享 ViewModel。
分段:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);
...
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
activityViewModel = ViewModelProviders.of(getActivity()).get(ActivityViewModel.class);
}
Run Code Online (Sandbox Code Playgroud)
但是为了知道我是否可以使用活动的 ViewModel 中的内容,我需要知道 是否在onActivityCreated(...)之后调用,onViewCreated(...)以便我可以根据我在活动的 ViewModel 中拥有的数据在 Fragment ViewModel 中请求我的数据。
总结一下:
确定onActivityCreated(...)是在onViewCreated(...)完成后调用吗?
通过这个答案,
我无法理解将onClickListener()- insideonCreateView()或 inside放在哪里onActivityCreated(),下面的代码更好地描述了它:
代码 A:(设置按钮点击监听器内onActivityCreated())
private FloatingActionButton bt;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// do something.
}
});
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.first_frag, container, false);
bt = (FloatingActionButton) v.findViewById(R.id.fab);
return v;
}
Run Code Online (Sandbox Code Playgroud)
CODE B:(设置按钮点击监听器里面onCreateView())
private FloatingActionButton bt;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) …Run Code Online (Sandbox Code Playgroud) 我应该在 onCreateView、onViewCreated 还是 onActivityCreated 中初始化我的回收视图?
这三个之间有什么区别,我搜索了解释,但有些人说使用 onCreateView ,有些人说使用 onViewCreated 或 onActivityCreated 并且只使用 onCreateView 来膨胀布局?
这是我的代码
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_tab1, container, false);
recyclerViewSongs = rootView.findViewById(R.id.recyclerViewSongs);
initRecyclerView();
Log.e(TAG, "onCreateView called!");
return rootView;
}
private void initRecyclerView() {
Main.musicList = Main.songs.songs;
// Connects the song list to an adapter
// (Creates several Layouts from the song list)
allSongsAdapter = new AllSongsAdapter(getContext(), Main.musicList);
final LinearLayoutManager linearLayoutManager …Run Code Online (Sandbox Code Playgroud) java android android-fragments android-recyclerview fragment-oncreateview
我在我的应用程序中使用导航选项卡.我有3个片段从Internet上加载不同的数据.我想知道在哪里放置发出HTTP请求的代码的最佳位置onCreate,onCreateView或者onActivityCreated?
通常,我将所有代码(请求数据,填充适配器,膨胀视图...)放入onCreateView.我也看到很多人在互联网上这样做.
但是这个指南https://github.com/thecodepath/android_guides/wiki/Creating-and-Using-Fragments以不同的方式做事.所以我想确定要做什么.
View片段的变量可以通过onCreateView这种方式在方法中初始化。这里TextView是片段内部。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmant_two,container,false);
if(savedInstanceState == null)
{
}
else
{
String data = savedInstanceState.getString("data");
TextView myText = (TextView)view.findViewById(R.id.text_view);
myText.setText(data);
}
return view;
}
Run Code Online (Sandbox Code Playgroud)
但是我发现里面有一个view是onActivityCreated 用这种方式初始化的。
textView = (TextView) getActivity().findViewById(R.id.text_view);
Run Code Online (Sandbox Code Playgroud)
没有任何理由,我应该选择onActivityCreated过 onCreateView?
我有一个片段,用于返回从REST API收到的文章列表.async我正在使用REST API await等待它完成.完成后,我将数据(即List<Article>)传递给一个被调用的变量,listofarticles并使用它来创建一个ArrayAdapter.
我在OnCreate这个片段的方法中做了上面的代码,OnCreateView据我所知,它应该在之前运行.
我的代码在一个活动中工作,但不是片段.
问题: 不等待对等待REST方法的调用.
逐行调试时,它是这样的:
OnCreate叫做.加工线在那里我称之为awaitable方法(即是为了填补listofarticles),简单地跳到OnCreateView.因此listofarticles为空.
OnCreateView被调用和处理.此时程序只会回到它所调用的活动.
我无法再调试它,因为Xamarin Studio认为我已经完成了但是在模拟器之后它只是在所有这些之后开始调用REST方法,因为内部的数据listofarticles是无用的,因为我现在无法将它传递给Adapter.
为什么会发生这种情况以及如何解决?
public class LatestNewsFragment : Android.Support.V4.App.Fragment, ListView.IOnItemClickListener
{
private Context globalContext = null;
private List<Article> listofarticles;
private ArrayAdapter<Article> listAdapter;
public LatestNewsFragment()
{
this.RetainInstance = true;
}
public async override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
globalContext = this.Context;
//Create a progress …Run Code Online (Sandbox Code Playgroud) 我试图让我的文本显示 faq_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/question_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textAlignment="center"
android:text="Title 1"/>
<TextView
android:id="@+id/answer_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textAlignment="center"
android:text="Description 1"
android:textColor="#33000000"
android:layout_marginTop="5dp"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
在我的Fragment类中
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
((TextView)container.findViewById(R.id.question_text)).setText(title);
((TextView)container.findViewById(R.id.answer_text)).setText(description);
return inflater.inflate(R.layout.faq_fragment, container, false);
}
Run Code Online (Sandbox Code Playgroud)
应用程序崩溃,我得到错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
Run Code Online (Sandbox Code Playgroud) android ×12
java ×4
android-tabs ×1
asynchronous ×1
c# ×1
fragment ×1
google-oauth ×1
lifecycle ×1
oauth ×1
oncreate ×1
xamarin ×1