【问题标题】:Cannot resolve method getContext() in android.support.v4.app.Fragment (version 21.0.3) Android Studio无法解析 android.support.v4.app.Fragment(版本 21.0.3)Android Studio 中的方法 getContext()
【发布时间】:2016-03-18 09:12:15
【问题描述】:

我遇到了一个我似乎无法理解为什么会发生的问题。我的项目中有一些片段使用 support v4 library (version 21.0.3) 。在这些片段中,我使用 getContext() 方法来展示 Toasts 。 但是昨天突然我项目中的所有 getContext 都坏了,Android Studio 在编译时显示了 26 个错误。这是破坏的多个示例之一

    package com.example.project.ui.fragment;


    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import com.example.project.R;
    import java.util.ArrayList;

    public class ListSizesFragment extends Fragment {

    private ArrayList<String> sizes;

    private ListView listViewSizes;
    private ArrayAdapter<String> adapter;


    public ListSizesFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_list_sizes, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        listViewSizes = (ListView) view.findViewById(R.id.listViewBlogs);
        sizes = new ArrayList<>(MAX_SIZES);
        sizes.addAll(getValueSizes())

        adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, sizes);
        listViewSizes.setAdapter(adapter);
        listViewSizes.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String resultSize = adapter.getItem(position);
                Toast.makeText(getContext(),"result :"+resultSize,Toast.LENGHT_SHORT).show();               getActivity().setResult(Activity.RESULT_OK);
                getActivity().finish();
            }
        });
    }
}

根据我在 Android 文档 (http://developer.android.com/reference/android/support/v4/app/Fragment.html#getContext()) 中看到的内容,getContext 是 support-v4 Fragment 的一种方法,所以我一直在试图找出问题所在。

在那个项目中,我也有一个 ViewPager,并且我无法使用 addOnPageListener 方法遇到同样的问题。

我已尝试重建项目并将项目与 Gradle 文件重新同步,但无济于事。

谢谢。

【问题讨论】:

    标签: android android-fragments android-studio


    【解决方案1】:

    Fragment#getContext() was added in version 23 of the support library。如果您无意中翻转了 build.gradle 文件以使用旧版本(您说 21.0.3),则不支持 getContext()

    【讨论】:

    • 所以我正在查看本地历史和 build.gradle 依赖项中 compile 'com.android.support:support-v4:+' 已更改为 compile 'com.android.support:support -v4:21.0.3' 昨天发生该问题时。然而,尝试使用最新版本又给我带来了另一个错误:Error:(3) Error retrieving parent for item: No resource found that match the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.
    • 如果我无意中翻转了 build.gradle 文件,我该如何“取消翻转”它们?为了更改支持库版本,我应该编辑什么文件?
    • @calvillo 您的模块的 build.gradle,特别是那里的 compile "com.android.support...
    • @laalto 该行不存在。我有“com.android.support:appcompat-v7:22.2.0”和“com.android.support:design:22.2.0”。有什么想法吗?
    • @calvillo:是的,您将通过这种方式获得 22.2.0 支持库。更新版本号。
    最近更新 更多