当我从列表中选择一个项目时回来

时间:2011-11-28 16:09:29

标签: android android-layout listadapter

我制作了一个列表,每次点击某个项目时,它都会打开另一个页面。问题是,如果使用后退按钮,它将关闭应用程序。我宁愿回到上一个菜单;我该如何解决这个问题?

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 个答案:

答案 0 :(得分:3)

你的问题在这里:

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()。通过这种方式,您可以在按下后返回活动的历史记录。

答案 1 :(得分:2)

您覆盖后退按钮并实现自己的代码。像这样:

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