سؤال

my problem seems simple but I can not manage to find an answer here.

I have different activities in one application. Activities start each other. I have a "main-screen" that shows all the different available levels, user clicks on a level and that activity is lunched, when user finishes that level, he can press the back-button to go to the main-screen and start another level. When back-button is pressed I would like to re-draw the "main-screen" again, since this time the thumb for the completed level will be different to show that it is completed.

So how do I run a re-draw on a activity upon back-button pressed? (I suppose I should put some code in the Activity.onResume method) (I use SharedPreferences to save the state of finished levels)

The main-screen activity is basically this:

    /** 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 then uses the boolean true/false to choose the source of the image, either the unfinished thumb or the finished level thumb.

هل كانت مفيدة؟

المحلول

First put your GridView objet as a class member. Then override the onResume() method in which you can re-set the grid view adapter based on what the user did.

private GridView gridview;
@Override
protected void onResume() {
    super.onResume();
    gridview.setAdapter(/* your new ImageAdapter here */);
}

نصائح أخرى

You should use the startActivityForResult() method of Activity. Basically, you are starting your next Activity, asking for the status of the request when it finishes. Just before it finishes, it should call setResult (allowing you to specify whether the user completed the level or not). The Activity that called it (your main screen) will have its onActivityResult() method called. In this method, you can update your Views as needed.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top