0

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;

}

}
4

1 に答える 1