相关疑难解决方法(0)

为什么我要避免片段中的非默认构造函数?

我正在使用Fragments其中一个创建一个应用程序,我创建了一个非默认构造函数并得到了这个警告:

Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么这不是一个好主意?

你能否建议我如何做到这一点:

public static class MenuFragment extends ListFragment {
    public ListView listView1;
    Categories category;

    //this is my "non-default" constructor
    public MenuFragment(Categories category){
        this.category = category;
    }....
Run Code Online (Sandbox Code Playgroud)

不使用非默认构造函数?

android android-fragments

168
推荐指数
4
解决办法
8万
查看次数

防止Android中的片段恢复

我们正在使用Fragments,我们不需要在重新创建Activity时自动恢复它们.但每当调用Activity::onCreate(Bundle savedInstanceState)- > 时super.onCreate(savedInstanceState),即使我们对这些片段使用setRetainInstance(false),也会恢复片段.

而且,在那些Fragments Fragment.performCreateView()被直接调用而不经过Fragment::onAttach()等等.另外,一些字段在恢复内部为空Fragment...

有谁知道如何阻止Android恢复片段?

PS我们知道,如果为配置更改重新创建活动,可以通过添加到清单a来完成ndroid:configChanges="orientation|screenSize|screenLayout.但是在自动内存清理的情况下重新创建活动呢?

android garbage-collection memory-management fragment recreate

30
推荐指数
2
解决办法
8399
查看次数

Android Datepicker Fragment - 当用户设置日期时如何做某事?

我在这里按照教程:http: //developer.android.com/guide/topics/ui/controls/pickers.html

我得到了工作,日期选择器出现了.但是,我被困在如何在用户设置日期时采取行动.

我看到他们有这种方法:

public void onDateSet(DatePicker view, int year, int month, int day) {
    // Do something with the date chosen by the user
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在其中添加任何代码,则无效.

我不熟悉Java所以我不确定需要哪些额外的代码来更新具有所选日期的textview.

我确实添加了这段代码:

private DatePickerDialog.OnDateSetListener mDateListener =
        new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker view, int year, int month, int day) {
                updateDate(year, month, day);
            }
        };

public void updateDate(int year, int month, int day) {
    TextView bdate = (TextView)findViewById(R.id.birthDate);
    Date chosenDate = new Date(year, month, day);
    java.text.DateFormat dateFormat = DateFormat.getDateFormat(getApplicationContext());
    bdate.setText(dateFormat.format(chosenDate));
} …
Run Code Online (Sandbox Code Playgroud)

android datepicker android-fragments

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

片段 - InstantiationException:没有空的构造函数 - > Google Maps v2?

当我通过App-Change按钮再次打开一个关闭的应用程序时,我收到此错误消息:

Caused by: java.lang.InstantiationException: can't instantiate class com.*.FragmentContact$1; no empty constructor
Run Code Online (Sandbox Code Playgroud)

我已经找到了几个关于Inner-Classes的技巧并使它们成为静态等等.但是这个FragmentContact是一个*.java文件中的公共类,并且有一个公共的空构造函数.我在这个项目中使用谷歌地图Api v2,并在互联网上的某个地方设置我的MapView.看这里:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_contact, null);

    try {
        MapsInitializer.initialize(this.getActivity().getApplicationContext());
    } catch (GooglePlayServicesNotAvailableException e) {
        e.printStackTrace();
    }

    fragment = new SupportMapFragment() {
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            mMap = fragment.getMap();
            if (mMap != null) {
                setupMap();
            }
        }
    };

    getFragmentManager().beginTransaction().replace(R.id.fragment_orte_map_parent, fragment).commit();

    return v;
}
Run Code Online (Sandbox Code Playgroud)

当我剪切这个MapView东西时,一切正常.也许有人可以解释我做错了什么.

我完整的Stacktrace:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable …
Run Code Online (Sandbox Code Playgroud)

android constructor fragment instantiationexception

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

错误:此片段应提供默认构造函数(不带参数的公共构造函数)

我的课程扩展DialogFragment如下:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    EditText editDate;
    private Calendar dateTime = Calendar.getInstance();
    private SimpleDateFormat dateFormatter = new SimpleDateFormat("dd MMMM yyyy");

    public DatePickerFragment(EditText editText) {
        editDate = editText;
    }

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    // Create a new instance of DatePickerDialog and return it
    return …
Run Code Online (Sandbox Code Playgroud)

java android android-studio

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

具有片段的Android InstantiationException(它是公共的)

我有一个Fragment(它不是一个内部类,它没有任何构造函数)

public class PreferenceListFragment extends ListFragment implements OnClickListener
Run Code Online (Sandbox Code Playgroud)

我在Android Developer Console上收到此崩溃报告:

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.redacted.redacted/com.redacted.redacted.PreferenceActivity}: 
android.support.v4.app.Fragment$InstantiationException: 
Unable to instantiate fragment com.redacted.redacted.PreferenceListFragment$3:
make sure class name exists, is public, and has an empty constructor that is
public
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1750)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1766)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2960)
at android.app.ActivityThread.access$1600(ActivityThread.java:127)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:945)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3818)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.support.v4.app.Fragment$InstantiationException: 
Unable to instantiate fragment com.redacted.redacted.PreferenceListFragment$3: 
make sure class name …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-support-library

12
推荐指数
1
解决办法
8906
查看次数

错误片段中的非默认构造函数

我正在处理地图apiv2.编码Dialog Fragment类时出现以下错误.

错误: Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead:

这是代码:

public PlaceDialogFragment(){
    super();
}

public PlaceDialogFragment(Place place, DisplayMetrics dm){
    super();
    this.mPlace = place;
    this.mMetrics = dm;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助都值得赞赏..

修改:这是整个代码...我是一个新手,从来没有处理过碎片.我正在通过地图啧啧发现这个......你现在详细说明了你想要解释的事情.

package com.example.travelplanner;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;

// Defining DialogFragment class to show …
Run Code Online (Sandbox Code Playgroud)

android google-maps

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

如何将数据从Activity发送到Fragment

我知道这里有很多关于这方面的话题.我也多次阅读文档,但我找不到将数据从活动传递到片段的最佳方法.

我希望能够使用带选项卡的滑动视图在两个不同的布局(列表和地图)中显示我的可搜索活动的结果.我必须将2个数据传递给片段:"currentLocation"是当前用户位置,"result"是对象列表.

我已经省略了代码的某些部分,以使其更容易理解.

SearchableActivity.java

public class SearchableActivity extends ActionBarActivity implements TabListener {

    List<PlaceModel> result = new ArrayList<PlaceModel>();
    private SearchView mSearchView;
    private String currentLocation;

    AppSectionsPagerAdapter mAppSectionsPagerAdapter;
        ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_searchable);

    final ActionBar actionBar = getSupportActionBar();
    actionBar.setHomeButtonEnabled(true);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mAppSectionsPagerAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }
    });

    actionBar.addTab(actionBar.newTab().setText("List").setTabListener(this));
    actionBar.addTab(actionBar.newTab().setText("Map").setTabListener(this));

    // get currentLocation here

    handleIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
    handleIntent(intent); …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-fragments android-view android-tabs

7
推荐指数
4
解决办法
9万
查看次数

为什么片段有默认构造函数?

片段中有默认构造函数,我想知道它的用途以及它提供的功能?我在没有它的情况下运行代码它工作得很好,我在删除它时找不到任何错误

public class SongListFragment extends Fragment {

   private static final String SONG_IDS = "song_ids";

   // TODO: Rename and change types of parameters
   private int[] songIds;
   private OnFragmentInteractionListener mListener;

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

   // TODO: Rename and change types and number of parameters
   public static SongListFragment newInstance(int[] songIds) {
      SongListFragment fragment = new SongListFragment();
      Bundle args = new Bundle();
      args.putIntArray(SONG_IDS, songIds);
      fragment.setArguments(args);
      return fragment;
   }

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      if (getArguments() != null) …
Run Code Online (Sandbox Code Playgroud)

android constructor android-fragments

5
推荐指数
2
解决办法
5090
查看次数

应用程序恢复后,Singleton对象变为null

对于我的Android项目,我需要全局单例Cache对象来通过应用程序访问有关用户的数据.

当应用程序进入后台并且在使用其他应用程序一段时间后我尝试在Cache对象中打开应用程序变量时出现问题.当我杀死应用程序并再次打开它时,一切都很好.我正在使用依赖注入来访问Cache对象.如果发生这种情况,为什么app不会再次启动?是否有一些注释可以在低内存条件下保持缓存变量?

这是我的Cache类

class Cache {
    var categories : Array<BaseResponse.Category>? = null
    var user : BaseResponse.User? = null
    var options : BaseResponse.OptionsMap? = null
    var order: MenuOrderDataModel? = null
}
Run Code Online (Sandbox Code Playgroud)

这是DI的存储模块

@Module class StorageModule {

    @Singleton @Provides fun getSharedPrefs(context: Context): SharedPreferences {
        return PreferenceManager.getDefaultSharedPreferences(context)
    }


    @Singleton @Provides fun getCache() : Cache = Cache()
}
Run Code Online (Sandbox Code Playgroud)

我注入对象@Inject lateinit var cache: Cache,然后在启动画面中填充用户数据.

编辑 - 从应用程序和启动活动添加的代码片段

class MyApp : Application() {
    val component: ApplicationComponent by lazy {
        DaggerApplicationComponent
                .builder()
                .appModule(AppModule(this))
                .build()
    } …
Run Code Online (Sandbox Code Playgroud)

android caching dependency-injection kotlin dagger-2

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

无法实例化片段 com.swmansion.rnscreens.Screen

我一直在使用 React Native 0.60.4 为 android 和 ios 开发一个应用程序,最近我发现将应用程序置于分屏或自由格式模式(因为它是屏幕上唯一的应用程序)有时会导致它崩溃。

我进一步玩了这个,发现我可以毫无问题地将应用程序启动到分屏或自由格式模式,但有时调整它的大小会导致它崩溃。下面是我在 Android Studio 中的调试器实例的输出,我正在努力理解:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myApp, PID: 32150
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myApp/com.myApp.MainActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.Screen$ScreenFragment: calling Fragment constructor caused an exception
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5279)
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5187)
        at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.Screen$ScreenFragment: calling Fragment constructor caused …
Run Code Online (Sandbox Code Playgroud)

android react-native androidx

4
推荐指数
2
解决办法
4841
查看次数

DialogFragment中的日期+时间选择器实现OnDateChangedListener和OnTimeChangedListener

我似乎无法设置我的DateTimeDialogFragment,因为它在我放置的部分不断崩溃:

datePicker = (DatePicker) getView().findViewById(R.id.DatePicker);
Run Code Online (Sandbox Code Playgroud)

错误日志:

02-14 21:38:43.262: E/AndroidRuntime(2435): FATAL EXCEPTION: main
02-14 21:38:43.262: E/AndroidRuntime(2435): java.lang.NullPointerException
02-14 21:38:43.262: E/AndroidRuntime(2435):     at com.test.DateTimeDialogFragment.onActivityCreated(DateTimeDialogFragment.java:98)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:847)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at android.app.BackStackRecord.run(BackStackRecord.java:622)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at android.os.Handler.handleCallback(Handler.java:605)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at android.os.Looper.loop(Looper.java:137)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at android.app.ActivityThread.main(ActivityThread.java:4424)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at java.lang.reflect.Method.invokeNative(Native Method)
02-14 21:38:43.262: E/AndroidRuntime(2435):     at java.lang.reflect.Method.invoke(Method.java:511)
02-14 21:38:43.262: E/AndroidRuntime(2435): …
Run Code Online (Sandbox Code Playgroud)

android

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

Android Fragment 实例化:newInstance()

我读了很多文章和 StackOverflow 答案,但仍然无法理解为什么我们需要工厂方法来创建 Fragment 的实例。

以下 Fragment 类都可以正常工作。

具有两个构造函数的片段:

public class CtorFragment extends Fragment {
    private static final String KEY = "the_key";

    public CtorFragment() {
        // Android calls the default constructor so default constructor must be explicitly defined.
        // As we have another constructor, Android won't create a default constructor for us.
    }

    public CtorFragment(String s) {
        // Set the arguments.
        Bundle bundle = new Bundle();
        bundle.putString(KEY, s);

        setArguments(bundle);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments

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