TextFieldを持つロード画面がほとんどありません。ロード画面が作成されると、新しいスレッドが起動します。そのスレッドには 3 つの作業があります。1) スキャニング クラスに新しいオブジェクトを作成し、そのスキャニング メソッドを実行します。null オブジェクト参照に対する android.view.Window.findViewById(int)'および 3) setPackages を使用してすべてのパッケージを返します。では、どうすればスレッドからウィジェットに到達できますか? また、私が言及したパート 3 についての追加の質問は、その正しい方法ですか?
public class LoadingScreen extends Activity {
private String status="";
List<ApplicationInfo> packages;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loadingscreen_layout);
updateWidget();
try {
startLoadingScreen();
}catch (Exception e){
Log.e("Scanner","Scanner",e);
}
}
public void startLoadingScreen(){
new Thread(new Runnable() {
@Override
public void run() {
Scanner scanner = new Scanner();
setPackages(scanner.Scan());
changeIntent();
finish();
}
});
}
public void setStatus(String status) {
this.status = status;
}
void updateWidget(){
TextView scanStatus = findViewById(R.id.statusView);
scanStatus.setText(status);
}
private void changeIntent(){
Intent intent = new Intent(this,DisplayClass.class);
startActivity(intent);
}
public void setPackages(List<ApplicationInfo> packages) {
this.packages = packages;
}
}
スキャニングクラス
public class Scanner extends Activity{
private LoadingScreen loadingScreen = new LoadingScreen();
List <android.content.pm.ApplicationInfo> Scan(){
loadingScreen.setStatus("Scanning");
loadingScreen.updateWidget();
final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
return packages;
}
}