相关疑难解决方法(0)

为什么片段中的getContext()有时会返回null?

为何getContext()有时会回归null?我将上下文LastNewsRVAdapter.java作为参数传递.但LayoutInflater.from(context)有时会崩溃.我在游戏机上收到一些崩溃报告.以下是崩溃报告.

java.lang.NullPointerException
com.example.adapters.LastNewsRVAdapter.<init>

java.lang.NullPointerException: 
at android.view.LayoutInflater.from (LayoutInflater.java:211)
at com.example.adapters.LastNewsRVAdapter.<init> (LastNewsRVAdapter.java)
at com.example.fragments.MainFragment$2.onFailure (MainFragment.java)
or                     .onResponse (MainFragment.java)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run 
(ExecutorCallAdapterFactory.java)
at android.os.Handler.handleCallback (Handler.java:808)
at android.os.Handler.dispatchMessage (Handler.java:103)
at android.os.Looper.loop (Looper.java:193)
at android.app.ActivityThread.main (ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative (Method.java)
at java.lang.reflect.Method.invoke (Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 
(ZygoteInit.java:825)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:641)
at dalvik.system.NativeStart.main (NativeStart.java)
Run Code Online (Sandbox Code Playgroud)

这是LastNewsRVAdapter.java构造函数.

public LastNewsRVAdapter(Context context, List<LatestNewsData> 
    latestNewsDataList, FirstPageSideBanner sideBanner) {
    this.context = context;
    this.latestNewsDataList = latestNewsDataList;
    inflater = LayoutInflater.from(context);
    this.sideBanner = sideBanner;
}
Run Code Online (Sandbox Code Playgroud)

这是onCreateView …

android android-fragments fragment-lifecycle

28
推荐指数
2
解决办法
2万
查看次数

主持人注射Dagger 2

我刚刚开始使用Dagger 2,我在网上发现了数千个指南,每个指南都有不同的实现,现在我有点困惑.所以基本上这就是我现在写的:

AppModule.java:

@Module
public class AppModule {

 Application mApplication;

 public AppModule(Application application) {
    mApplication = application;
 }

 @Provides
 @Singleton
 Application providesApplication() {
    return mApplication;
 }
}
Run Code Online (Sandbox Code Playgroud)

DataModule.java:

@Module
public class DataModule {

private static final String BASE_URL = "http://beta.fridgewizard.com:9001/api/";

@Provides
@Singleton
NetworkService provideNetworkService() {
    return new NetworkService(BASE_URL);
}

@Provides
@Singleton
SharedPreferences provideSharedPreferences(Application app) {
    return PreferenceManager.getDefaultSharedPreferences(app);
}
}
Run Code Online (Sandbox Code Playgroud)

PrefsModel.java:

@Module(includes = DataModule.class)
public class PrefsModel {

@Provides
@Singleton
QueryPreferences provideQuery(SharedPreferences prefs) {
    return new QueryPreferences(prefs);
}
}
Run Code Online (Sandbox Code Playgroud)

AppComponent.java(我暴露了QueryPreferences对象,因为我需要在演示者中使用它,希望以这种方式正确):

@Singleton …
Run Code Online (Sandbox Code Playgroud)

java mvp android dependency-injection dagger-2

11
推荐指数
2
解决办法
1万
查看次数

什么时候片段不附加到活动而只附加到上下文?

Fragment.getActivity() 的文档中,它说:Return the FragmentActivity this fragment is currently associated with. May return null if the fragment is associated with a Context instead.

但是片段怎么能不与活动相关联呢?我的意思是,我不是总是需要一个活动来在 Android 中显示任何内容吗?

android android-fragments

10
推荐指数
1
解决办法
235
查看次数

片段中的getPackageName()

我正在使用此方法调整Google地图活动中的标记大小:

public Bitmap resizeMapIcons(String iconName,int width, int height){
    Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(),getResources().getIdentifier(iconName, "drawable", getPackageName()));
    Bitmap resizedBitmap = Bitmap.createScaledBitmap(imageBitmap, width, height, false);
    return resizedBitmap;
}
Run Code Online (Sandbox Code Playgroud)

现在我想在MapView的片段中使用它,但是我收到错误"错误:找不到符号方法getPackageName()".可能是什么问题呢?

icons android bitmap android-fragments

9
推荐指数
3
解决办法
1万
查看次数

我得到 Fragment 未附加到上下文。需要使用什么上下文?

我从 Firebase Crashlytics 收到异常

Fatal Exception: java.lang.IllegalStateException: Fragment MyFragment{122418b (05b123e6-aa8d-4de4-8f7e-49c95018234b)} not attached to a context.
       at androidx.fragment.app.Fragment.requireContext(Fragment.java:774)
       at androidx.fragment.app.Fragment.getResources(Fragment.java:838)
       at com.timskiy.pregnancy.fragments.MyFragment$1$1.run(MyFragment.java:156)
       at android.os.Handler.handleCallback(Handler.java:907)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:216)
       at android.app.ActivityThread.main(ActivityThread.java:7625)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
Run Code Online (Sandbox Code Playgroud)

片段中的错误行

imageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.blue));
Run Code Online (Sandbox Code Playgroud)

也试过

imageView.setColorFilter(getResources().getColor(R.color.blue));
Run Code Online (Sandbox Code Playgroud)

我在 Activity 和 FragmentStatePagerAdapter 中使用 viewPager。我需要在片段中使用什么上下文来 setColorFilter?谢谢

android fragment imageview

8
推荐指数
3
解决办法
1万
查看次数

getActivity从片段返回null

对于学校我正在制作一个Android应用程序.对于这个应用程序,我有一个片段,它从数据库中显示一个只有字符串的gridview.为此,我需要一个片段.当我调用getActivity()时,它返回null.该onAttach方法,如建议在这里没有得到应用程序崩溃之前调用.我该怎么解决这个问题?
weekFragmetn.xml:

package nl.siebeh.schoolmate;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;

public class weekFragment extends Fragment {
    dbLayer db;
    Context mContext;

    @Override
    public void onAttach(Activity activity) {
        mContext = getActivity();
        Log.i("Schoolmate","onAttach called");
        super.onAttach(activity);
    }

    public weekFragment newInstance(String title) {
        Log.i("Schoolmate","newInstance called");
        db = new dbLayer(mContext);
        weekFragment fragment = new weekFragment();
        ArrayList<ArrayList<Object>> result = null;

        if(title == "leraren"){
            result = …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

6
推荐指数
1
解决办法
1万
查看次数

片段getActivity()在Activity JUnit测试中返回null

我为Activity编写了Android JUnit测试实例化片段(实际上是制表符).在测试期间,当我尝试对这些选项卡执行任何操作时,它们会崩溃,因为其中的getActivity()方法返回null.实际应用程序(不是测试)从不显示此行为,并且片段getActivity()始终返回正确的父活动.我的测试用例如下:

public class SetupPanelTest extends ActivityUnitTestCase<MyAct> {

    FSetup s;   

    public SetupPanelTest() {
    super(MyAct.class);
    }

    protected void setUp() throws Exception {
        super.setUp();
        startActivity(new Intent(), null, null);
        final MyAct act = getActivity();

        AllTabs tabs = act.getTabs();
        String tabname = act.getResources().getString(R.string.configuration);

        // This method instantiates the activity as said below
        s = (FSetup) tabs.showTab(tabname);
        FragmentManager m = act.getFragmentManager();
        // m.beginTransaction().attach(s).commit(); 
        //     ... and even this does not help when commented out

        assertTrue(s instanceof FSetup);  // Ok     
        assertEquals(act, s.getActivity()); // Failure
    }

    public …
Run Code Online (Sandbox Code Playgroud)

junit android unit-testing android-fragments

5
推荐指数
1
解决办法
3403
查看次数

getActivity 空异常警告?

我有一个片段,我将在其中执行以下操作:

getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                                }
                    });
Run Code Online (Sandbox Code Playgroud)

在这里,我收到runOnUiThread了警告may produce NullPointerException。代码可以正常工作。Android Studio 建议我像这样更改代码:

Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
Run Code Online (Sandbox Code Playgroud)

这是明智的吗?有没有其他/更好的方法?

android android-fragments android-activity

5
推荐指数
1
解决办法
1742
查看次数

为什么我的片段的getActivity返回null?

我目前在我的主要活动中有一个帖子下载东西frow web,然后我需要在下载完成后更新ViewPager中的Fragments.

下载由服务处理,并在完成后广播Intent.

所以,基本上,我的主Activity中的代码是:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ((PositionFragment)mPagerAdapter.getItem(0)).updateUI();
    }
}
Run Code Online (Sandbox Code Playgroud)

和我的PositionFragment:

public void updateUI() {
    mActivity = getActivity();
Run Code Online (Sandbox Code Playgroud)

我真的不明白这是怎么回事.这听起来很简单,但我必须遗漏一些东西!

任何的想法?

编辑:我的适配器:

public class PageAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;

    public PageAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }
}
Run Code Online (Sandbox Code Playgroud)

null android android-activity

4
推荐指数
1
解决办法
3万
查看次数

为什么我的片段中的活动上下文为空?

我正在尝试创建一个样板片段。当我尝试设置 RecyclerView 的 LayoutManager 时,我不断收到空引用错误:

尝试在空对象引用上调用虚拟方法“void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)”

以下是我调用以获取错误的顺序:

主类:

public class PagerAdapter extends FragmentPagerAdapter {
    ...
    @Override
    public Fragment getItem(int position){
        switch(position){
            default:
                return new WhatsNew();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

WhatsNew.class:

public class WhatsNew extends Base {

    private LayoutInflater mInflater;
    private Handler mHandler = new Handler();

    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    public void init() {
        mInflater = LayoutInflater.from(mContext);
        mLayoutManager = new LinearLayoutManager(mContext);
        mDataView.setLayoutManager(mLayoutManager);  //<-- Where the null reference is
    }

    @Override
    public void doWork() {

        WhatsNewAdapter mAdapter = new WhatsNewAdapter();
        mDataView.setAdapter(mAdapter);
        ... …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments

0
推荐指数
1
解决办法
862
查看次数

Android Fragment - getActivity().runOnUiThread在重启app时返回null

当我第一次启动应用程序时,下面的代码工作正常.但是当离开应用程序并再次打开它时,我得到一个错误说getActivity() returns null.

我在片段中执行此代码:

(getActivity()).runOnUiThread(new Runnable() {
            @Override
            public void run() {
                    enableMenu();
                    openMenu();
                    navigateToFragment(new BlankFragment());
                }
            });
Run Code Online (Sandbox Code Playgroud)

该怎么办 ?

我怎样才能获得活动?

android android-activity android-fragmentactivity

0
推荐指数
1
解决办法
2250
查看次数