我正在开发一款从互联网上下载一些信息的应用。在应用程序开始时,会出现一个对话框,询问用户是否要下载该信息。如果他这样做,它将开始下载过程(在另一个线程中)。
这是代码:
的活动:
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();
}
}
一切都在起作用,但如果我希望将来添加功能,它可能会变得混乱。
所以我的问题是: 我该如何改进这段代码?
在下载过程完成或从未发生时,添加一个触发事件“show list”的侦听器会不会更好?
我该怎么办?我一直在阅读,但找不到任何有用的东西。
答案 0 :(得分:6)
拥有侦听器是为代码添加可扩展性以及解耦事件和处理程序的好方法。以下是您需要采取的步骤:
public interface ShowListEventLisener {
public void onShowList(Object... params);
}
public void setOnShowListListener(ShowListEventLisener showListListener) {
this.showListListener = showListListener;
}
如果您需要“show list”事件
的不同行为,这将允许您增加灵活性
if( isDownloadFinished) {
// call the listeners with the parameters that you need to pass back
this.showListListener.onShowList(paramsThatYouNeed);
}
请注意,由于您在不同的线程中执行下载,因此您可能希望在触发事件之前使用Handler / AsyncTask。上面的示例是一般化的,但应该足以让您遵循以构建自己的自定义侦听器。
答案 1 :(得分:2)
您可以使用Handler
来表示您的用户界面。
我认为this guide很简单。
答案 2 :(得分:2)
请参阅
我希望是你想要的