вернуться, когда я выберу предмет из списка - PullRequest
1 голос
/ 28 ноября 2011

Я составил такой список, что каждый раз, когда я нажимаю на элемент, он открывает другую страницу.Проблема в том, что если вы используете кнопку «Назад», приложение закроется.Я бы предпочел вернуться в предыдущее меню;как я могу это исправить?

public class Listview extends Activity {

    static ListView listView;

    static public class BackgroundWorker extends AsyncTask<Void, Person, Void> {
        @SuppressWarnings("unchecked")
        @Override
        protected void onPreExecute () {
            // Prima di iniziare a inserire gli elementi svuotiamo l'adapter
            ( ( ArrayAdapter<Person> ) listView.getAdapter() ).clear();
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground ( Void... params ) {
            Person[] people = { new Person( "Privacy",R.drawable.icon1 ) };
            Person[] people1 = {new Person( "Visualizzazione", R.drawable.icon1 )};
            Person[] people2=  { new Person( "Notifiche", R.drawable.icon1)};

            // riempimento casuale della lista delle persone
            Random r = new Random();

            for ( int i = 0; i < 1; i++ ) {
                // Pubblichiamo il progresso
                publishProgress( people);
                publishProgress( people1);
                publishProgress( people2);
            }

            return null;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void onProgressUpdate ( Person... values ) {
            // Aggiungiamo il progresso pubblicato all'adapter
            ( ( ArrayAdapter<Person> ) listView.getAdapter() ).add( values[0] );
            super.onProgressUpdate( values );
        }
    }

    @Override
    public void onCreate ( final Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.main );
        listView = ( ListView ) findViewById( R.id.personListView );
        listView.setAdapter( new PersonAdapter( this, R.layout.row_item, new ArrayList<Person>() ) );
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Person p = (Person) parent.getItemAtPosition(position);

                switch(position) {
                    case 0:
                        onCreate1(savedInstanceState);
                        //  setContentView(R.layout.main1);
                        break;
                    case 1:
                        setContentView(R.layout.main2);
                        break;
                    case 2:
                        setContentView(R.layout.main3);
                }
            }
        });
        new BackgroundWorker().execute();
    }
}

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Ваша проблема здесь:

switch(position) {
    case 0:
        onCreate1(savedInstanceState);
        //  setContentView(R.layout.main1);
        break;
    case 1:
        setContentView(R.layout.main2);
        break;
    case 2:
        setContentView(R.layout.main3);
}

Вы не должны использовать setContentView более одного раза в Activity. Вместо этого вы должны запустить новый Activity с startActivity(). Таким образом, у вас есть история действий, которая будет возвращена после нажатия кнопки Назад.

2 голосов
/ 28 ноября 2011

Вы переопределяете кнопку возврата и внедряете свой собственный код. Как это:

@Override
    public void onBackPressed() {
        //Your code
    return;
    }
...