0
所以我试图将更改日志并入我的应用程序。如果我把这段代码放到我的活动的onCreate方法中,但一切都很好,但我不希望这样,我希望它在用户单击我的首选项类中的“更新日志”首选项时工作。构造函数未定义
下面是我使用
//Launch change log dialog
ChangeLogDialog _ChangelogDialog = new ChangeLogDialog(this);
_ChangelogDialog.show();
的代码,但是,当我把在我的偏好上点击我得到这个错误
“构造ChangeLogDialog(新Preference.OnPreferenceClickListener(){})是未定义”
这里的changelog的类
import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;
/*
* Class to show a changelog dialog
* (c) 2012 Martin van Zuilekom (http://martin.cubeactive.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
public class ChangeLogDialog {
static final private String TAG = "ChangeLogDialog";
static final private String TITLE_CHANGELOG = "title_changelog";
static final private String CHANGELOG_XML = "changelog";
private Activity fActivity;
public ChangeLogDialog(Activity context) {
fActivity = context;
}
//Get the current app version
private String GetAppVersion(){
try {
PackageInfo _info = fActivity.getPackageManager().getPackageInfo(fActivity.getPackageName(), 0);
return _info.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
return "";
}
}
//Parse a the release tag and return html code
private String ParseReleaseTag(XmlResourceParser aXml) throws XmlPullParserException, IOException {
String _Result = "<h1>Release: " + aXml.getAttributeValue(null, "version") + "</h1><ul>";
int eventType = aXml.getEventType();
while ((eventType != XmlPullParser.END_TAG) || (aXml.getName().equals("change"))) {
if ((eventType == XmlPullParser.START_TAG) &&(aXml.getName().equals("change"))){
eventType = aXml.next();
_Result = _Result + "<li>" + aXml.getText() + "</li>";
}
eventType = aXml.next();
}
_Result = _Result + "</ul>";
return _Result;
}
//CSS style for the html
private String GetStyle() {
return
"<style type=\"text/css\">"
+ "h1 { margin-left: 0px; font-size: 12pt; }"
+ "li { margin-left: 0px; font-size: 9pt;}"
+ "ul { padding-left: 30px;}"
+ "</style>";
}
//Get the changelog in html code, this will be shown in the dialog's webview
private String GetHTMLChangelog(int aResourceId, Resources aResource) {
String _Result = "<html><head>" + GetStyle() + "</head><body>";
XmlResourceParser _xml = aResource.getXml(aResourceId);
try
{
int eventType = _xml.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if ((eventType == XmlPullParser.START_TAG) &&(_xml.getName().equals("release"))){
_Result = _Result + ParseReleaseTag(_xml);
}
eventType = _xml.next();
}
}
catch (XmlPullParserException e)
{
Log.e(TAG, e.getMessage(), e);
}
catch (IOException e)
{
Log.e(TAG, e.getMessage(), e);
}
finally
{
_xml.close();
}
_Result = _Result + "</body></html>";
return _Result;
}
//Call to show the changelog dialog
public void show() {
//Get resources
String _PackageName = fActivity.getPackageName();
Resources _Resource;
try {
_Resource = fActivity.getPackageManager().getResourcesForApplication(_PackageName);
} catch (NameNotFoundException e) {
e.printStackTrace();
return;
}
//Get dialog title
int _resID = _Resource.getIdentifier(TITLE_CHANGELOG , "string", _PackageName);
String _Title = _Resource.getString(_resID);
_Title = _Title + " v" + GetAppVersion();
//Get Changelog xml resource id
_resID = _Resource.getIdentifier(CHANGELOG_XML, "xml", _PackageName);
//Create html change log
String _HTML = GetHTMLChangelog(_resID, _Resource);
//Get button strings
String _Close = _Resource.getString(R.string.changelog_close);
//Check for empty changelog
if (_HTML.equals("") == true)
{
//Could not load change log, message user and exit void
Toast.makeText(fActivity, "Could not load change log", Toast.LENGTH_SHORT).show();
return;
}
//Create webview and load html
WebView _WebView = new WebView(fActivity);
_WebView.loadData(_HTML, "text/html", "utf-8");
AlertDialog.Builder builder = new AlertDialog.Builder(fActivity)
.setTitle(_Title)
.setView(_WebView)
.setPositiveButton(_Close, new Dialog.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
builder.create().show();
}
}
应该是:'ChangeLogDialog _ChangelogDialog = new ChangeLogDialog(YourActivity.this); ' –
你不能在那里实现,因为你的'ChangeLogDialog'类没有接受'OnPreferenceClickListener'对象的构造函数。 – JoelFernandes
不能相信我错过了。谢谢! @邹邹如果你可以让你的评论成为一个答案,那么我可以投票选出一个好的答案。 – Fernando