проблеми с вътрешен статичен клас и gradle на фрагменти

Първоначално получавах грешка „Този ​​вътрешен клас на фрагмент трябва да е статичен“ в следния код:

 public class Activity4 extends FragmentActivity {

    EditText mEdit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity4);
    }


    public void selectDate(View view) {
    DialogFragment newFragment = new SelectDateFragment();
    newFragment.show(getSupportFragmentManager(), "DatePicker");
}

public void populateSetDate(int year, int month, int day) {
    mEdit = (EditText) findViewById(R.id.editText);
    mEdit.setText(day + "/" + month + "/" + year);
}

//error was here at SelectDateFragment
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Calendar calendar = Calendar.getInstance();
        int yy = calendar.get(Calendar.YEAR);
        int mm = calendar.get(Calendar.MONTH);
        int dd = calendar.get(Calendar.DAY_OF_MONTH);
        return new DatePickerDialog(getActivity(), this, yy, mm, dd);
    }

    public void onDateSet(DatePicker view, int yy, int mm, int dd) {
        populateSetDate(yy, mm + 1, dd);
    }
}
}

Опитах се да разбера решението и прочетох в някаква публикация тук, че това е грешка на мъх и може да бъде разрешена чрез добавяне на това към файла gradle:

lintOptions {
abortOnError false
}

но когато го направих, получавам съобщението, че "не може да разреши символ getDefaultProguardFile". Това е моят gradle файл:

apply plugin: 'com.android.application'

android {
compileSdkVersion 22
buildToolsVersion "22.0.1"

defaultConfig {
    applicationId "com.sample.pat1"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
lintOptions {
    abortOnError false
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
}

И предишната грешка „Този ​​вътрешен клас на фрагмент трябва да е статичен“ все още съществува. Изненадващо приложението работи добре въпреки всичко това.. но бих искал да знам къде греша.. Моля, помогнете!


person useru22    schedule 07.07.2015    source източник


Отговори (1)


Ако не искате да пренапишете комуникационния механизъм, можете ръчно да маркирате фрагмента като валиден:

@SuppressLint("ValidFragment")
DialogFragment newFragment = new SelectDateFragment();

Повече описание тук

P.S. Proguard - това е съвсем друг въпрос.

person Yaroslav Havrylovych    schedule 04.01.2016