Tiv*_*vie 2 events android listener
我正在开发一个从互联网下载一些信息的应用程序.在应用程序开始时,会出现一个对话框,询问用户是否要下载该信息.如果他这样做,它开始下载过程(在另一个线程中).
这是代码:
活动:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Initialize preferences
settings = PreferenceManager.getDefaultSharedPreferences(this);
// Start Database
db.open();
db.close();
/**Check for updates**/
checkForDBUpdates(settings.getInt("db_version", 0));
}
private void checkForDBUpdates(int Version)
{
// Check if Internet connection is available
boolean online = isOnline();
if (online)
{
final UpdateNDGS update = new UpdateNDGS(this, Version);
boolean update_status = update.check();
if (update_status)
{
System.out.println("READY TO UPDATE!");
Command updateCommand = new Command()
{
public void execute()
{
update.getUpdate();
update.database();
//Download Complete, show list
startNormasList();
}
};
AlertDialog updateDialog = createUpdateDialog(this, updateCommand);
updateDialog.show();
}
else
{
//Nothing to download, show list
startNormasList();
}
}
else
{
//offline, show list
startNormasList();
}
}
Run Code Online (Sandbox Code Playgroud)
一切都在实际工作,但如果我希望将来添加功能,它可能会变得混乱.
所以我的问题是:如何改进此代码?
在下载过程完成或从未发生过时,添加一个触发事件"show list"的侦听器会不会更好?
我该怎么办?我一直在阅读,但找不到任何有用的东西.
拥有侦听器是为代码添加可扩展性以及解耦事件和处理程序的好方法.以下是您需要执行的步骤:
public interface ShowListEventLisener {
public void onShowList(Object... params);
}
Run Code Online (Sandbox Code Playgroud)
public void setOnShowListListener(ShowListEventLisener showListListener) {
this.showListListener = showListListener;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要"show list"事件的不同行为,这将允许您添加灵活性
if( isDownloadFinished) {
// call the listeners with the parameters that you need to pass back
this.showListListener.onShowList(paramsThatYouNeed);
}
Run Code Online (Sandbox Code Playgroud)
请注意,由于您在不同的线程中执行下载,因此您可能希望在触发事件之前使用Handler/AsyncTask.上面的示例是一般化的,但应该足以让您遵循以构建自己的自定义侦听器.