Androidでアクティビティを再描画します
-
11-10-2019 - |
質問
私の問題は簡単に思えますが、ここで答えを見つけることができません。
1つのアプリケーションでさまざまなアクティビティがあります。アクティビティは互いに始まります。私は持っています "メインスクリーン" これにより、利用可能なすべてのレベルが表示され、ユーザーがレベルをクリックし、そのアクティビティが昼食になります。ユーザーがそのレベルを終了すると、バックボタンを押してメインスクリーンに移動して別のレベルを開始できます。バックボタンが押されたら、再び「メインスクリーン」を再描画したいと思います。この時点で完了したレベルの親指は、完了したことを示すために異なります。
では、バックボタンプレス時にアクティビティで再描画を実行するにはどうすればよいですか? (アクティビティにコードを入れるべきだと思います。Onresumeメソッド)(sharedpreferencesを使用して、完成レベルの状態を保存します)
メインスクリーンアクティビティは基本的にこれです。
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.maps);
SharedPreferences settings = getSharedPreferences((getResources().getString(R.string.PREFS_HI)),0);
/**/
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this,(settings.getBoolean("level_1_finished", false))));
/**/
gridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//Open the map which was clicked on, if there is one
if(position+1 > 1){
Toast.makeText(maps.this, "Level " + (position+1) + " is not yet available!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(maps.this, "Opening Level " + (position+1), Toast.LENGTH_SHORT).show();
Intent myIntent = new Intent(v.getContext(), Tutorial2D.class);
startActivity(myIntent);
}
}
});
}
ImageAdapterは、ブールのTrue/Falseを使用して、未完成の親指または完成レベルの親指のいずれかを選択します。
解決
最初にあなたを置きます GridView
クラスメンバーとしてのObjet。次に、をオーバーライドします onResume()
ユーザーが行ったことに基づいて、グリッドビューアダプターを再設定できる方法。
private GridView gridview;
@Override
protected void onResume() {
super.onResume();
gridview.setAdapter(/* your new ImageAdapter here */);
}
他のヒント
を使用する必要があります startActivityForResult()
の方法 アクティビティ. 。基本的に、次のアクティビティを開始し、リクエストが終了したときにステータスを要求します。終了する直前に、SetResultを呼び出す必要があります(ユーザーがレベルを完了したかどうかを指定できます)。それを呼んだアクティビティ(あなたのメイン画面)にはそのものがあります onActivityResult()
呼び出された方法。この方法では、必要に応じてビューを更新できます。