我有一个非常简单的小部件应用程序,只有一个活动(MainActivity)。 我从一开始就从BlankActivity模板创建了MainActivity。我稍后用组件填充它,我已将它添加到AndroidManifest。
问题是Android不会启动活动(唯一一个)。
我在应用启动时看到的是白色空白视图(带顶部栏的应用名称)。
我已经设置了一个断点,并且在调试过程中没有找到它。
我尝试将DEFAULT类别设置为MainActivity而没有它:
<category android:name="android.intent.category.DEFAULT"/>
我试图将完整或短途径放到主要活动中:
android:name="pl.test.firstwidget.view.MainActivity"
android:name=".view.MainActivity"
我确定我的MainActivity在视图包中。
的AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pl.test.firstwidget"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".view.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<receiver android:name=".view.MyWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info" />
</receiver>
</application>
</manifest>
MainActivity.java:
package pl.test.firstwidget.view;
(...)
public class MainActivity extends AppCompatActivity {
@BindView(R.id.ordersNumber) TextView ordersNumber;
@BindView(R.id.ordersValue) TextView ordersValue;
@BindView(R.id.lastUpdate) TextView lastUpdate;
@BindView(R.id.refreshButton) TextView refreshButton;
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
fillView();
}
private void fillView() {
//empty so far
}
@OnClick(R.id.refreshButton)
public void refresh() {
//empty so far
}
}
的build.gradle
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId 'pl.test.firstwidget'
minSdkVersion 15
targetSdkVersion 25
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'
compile group: 'joda-time', name: 'joda-time', version: '2.9.9'
compile 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
}
有人看到我做错了吗?
答案 0 :(得分:3)
您需要覆盖用于api 21+的public void onCreate(Bundle savedInstanceState)
而不是public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState),以便在重新启动时保持您的活动状态
注意与onCreate(android.os.Bundle)相同,但要求那些 使用persistableMode属性设置为persistAcrossReboots创建的活动(在清单中,否则它不会被调用因此为空视图)
关于PersistableBundle
如果活动正在进行中 在之前关闭或关闭之后重新初始化 此Bundle包含最近提供的数据 onSaveInstanceState(Bundle)中的outPersistentState。注意:否则它 是空的。
所以使用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
fillView();
}
答案 1 :(得分:2)
似乎没有错。
您在清单中不需要android.intent.category.DEFAULT
,android.intent.action.MAIN
和android.intent.category.LAUNCHER
应该有效
如果您正在开始Android开发,暂时删除所有对butterKnife的引用并暂时不使用它;只是为了验证它是否运行。
按照Pavneet_Singh的说法更改onCreate
方法,但不要使用超级只使用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.activity_main);
// ..code
}