【问题标题】:Unreachable statement in onCreateView()onCreateView() 中无法访问的语句
【发布时间】:2018-06-06 09:13:11
【问题描述】:

我正在尝试构建一个包含多个片段的应用程序,其中所有片段都实现LoaderCallbacks。我一直在阅读 StackOverflow 上的帖子,其中大多数人都指出要使用 import android.support.v4.app 的东西。我做到了。但是,当我尝试从片段的 onCreateViewgetLoaderManager 时,我收到 Unreachable statement 错误。

这是我的片段之一

package com.example.android.morenews;

import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;


/**
 * Created by on 24.12.17.
 */

public class CultureFragment extends Fragment implements LoaderManager.LoaderCallbacks<List<News>>{
    private String baseUrlString= "https://content.guardianapis.com/search?show-fields=headline,thumbnail,wordcount,trailText";
    private String LOG_TAG= CultureFragment.class.getName();
    public LoaderManager loaderManager;

    public Fragment fragment = this;

    public CultureFragment(){
        //empty constructor
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        return super.onCreateView(inflater, container, savedInstanceState);

        loaderManager = getLoaderManager(); <-- This is where im getting the unreachable statement error.
        loaderManager.initLoader(1, null, this);

    }

    @Override
    public Loader<List<News>> onCreateLoader(int id, Bundle args) {
        Uri baseUri = Uri.parse(baseUrlString);
        Uri.Builder uriBuilder = baseUri.buildUpon();

        uriBuilder.appendQueryParameter("section","sports");
        uriBuilder.appendQueryParameter("page-size","20");
        uriBuilder.appendQueryParameter("api-key","test");
        uriBuilder.appendQueryParameter("format","json");
        uriBuilder.appendQueryParameter("orderBy", "newest");

        Log.e(LOG_TAG, " the url  " + uriBuilder.toString());

        return new NewsLoader(getContext(), uriBuilder.toString());
    }

    @Override
    public void onLoadFinished(android.support.v4.content.Loader<List<News>> loader, List<News> data) {

    }

    @Override
    public void onLoaderReset(android.support.v4.content.Loader<List<News>> loader) {

    }
}

这是我的 Loader 类,

  package com.example.android.morenews;

import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;

import java.util.List;

/**
 * Created by on 24.12.17.
 */

public class NewsLoader extends AsyncTaskLoader<List<News>> {

    String mUrl;

    public NewsLoader(Context context, String url)
    {
        super(context);
        mUrl=url;
    }

    @Override
    public List<News> loadInBackground() {
        if (mUrl==null){
            return null;
        }
        return QueryUtils.fetchNewsFromApi(mUrl);    }



    @Override
    protected void onStartLoading() {
        forceLoad();
    }
}

【问题讨论】:

    标签: java android android-fragments return


    【解决方案1】:

    这是因为在return 语句之后调用它,这意味着不会执行其他代码行。在return 语句之前执行:

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        loaderManager = getLoaderManager();
        loaderManager.initLoader(1, null, this);
    
        return super.onCreateView(inflater, container, savedInstanceState);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      相关资源
      最近更新 更多