片段内部静态类和gradle问题

Posted

技术标签:

【中文标题】片段内部静态类和gradle问题【英文标题】:fragment inner static class and gradle issues 【发布时间】:2015-09-25 01:24:29 【问题描述】:

最初我在以下代码中收到错误“这个片段内部类应该是静态的”:

 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);
    


我试图找出解决方案并在此处阅读一些帖子,这是一个 lint 错误,可以通过将其添加到 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'

并且之前的错误“这个片段内部类应该是静态的”仍然存在。令人惊讶的是,尽管这一切,该应用程序运行良好.. 但我想知道我哪里出错了.. 请帮忙!

【问题讨论】:

【参考方案1】:

如果不想重写通信机制,可以手动将fragment标记为有效:

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

更多描述here

附: Proguard - 这完全是另一个问题。

【讨论】:

以上是关于片段内部静态类和gradle问题的主要内容,如果未能解决你的问题,请参考以下文章

静态类和内部类的区别是啥

内部类和静态内部类有什么区别?

静态内部类和非静态内部类的区别

Java面试题|静态内部类和非静态内部类有什么区别?

Java内部类和静态嵌套类

Java 静态内部类作用?