2014-12-14 2 views
0

Я искал решение и не могу найти его здесь.та же деятельность другой listview

В настоящее время я пытаюсь достичь, когда я нажимаю на пункт меню. Я хочу начать одно и то же действие с тем же меню, но с разными данными списка. Данные взяты из SQLITE.

Что я сделал, когда я выбираю и выбираю (onoptionsitemselected) Я передаю несколько аргументов, чтобы узнать, какие данные извлекаются из базы данных, но он просто работает с первым вариантом, другие не работают.

Это код моей деятельности я думаю, что я использую неправильно в Intents

public class PlantillaChina extends ActionBarActivity{ 

// DB Class to perform DB related operations 
DBController controller = new DBController(this); 
// Progress Dialog Object 
ProgressDialog prgDialog; 
HashMap<String, String> queryValues; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.lista); 
    Intent myIntent = getIntent(); 
    Intent myIntent2 = getIntent(); 
    Intent myIntent3 = getIntent(); 
    Intent myIntent4 = getIntent(); 

    String value = myIntent.getStringExtra("entremeses"); 
    String value2 = myIntent2.getStringExtra("arroces"); 
    String value3 = myIntent3.getStringExtra("mar"); 
    String value4 = myIntent4.getStringExtra("carnes"); 

// Get plato records from SQLite DB 

    ArrayList<HashMap<String, String>> platoList = new ArrayList<HashMap<String, String>>(); 
    if (value.equals("entremeses")){ 
     platoList = controller.getAllEntremeses(); 
    }else if(value2.equals("arroces")){ 
      platoList = controller.getAllArrocesyPasta(); 
     }else if(value3.equals("mar")){ 
       platoList = controller.getAllMar(); 
      }else if(value4.equals("carnes")){  
         platoList = controller.getAllCarnes(); 
      } 
    // If plato exists in SQLite DB 
    if (platoList.size() != 0) { 
     // Set the plato Array list in ListView 
     ListAdapter adapter = new SimpleAdapter(PlantillaChina.this, platoList, R.layout.itemlista, new String[] { 
         "platoNombre", "platoDescripcion", "platoPrecio" }, new int[] { R.id.nombre, R.id.descripcion, R.id.precio }); 
     ListView myList = (ListView) findViewById(R.id.listaplatos); 
     myList.setAdapter(adapter); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.china, menu); 
    return true; 
} 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
// int id = item.getItemId(); 
    // if (id == R.id.action_settings) { 
    // return true; 
    switch (item.getItemId()){ 
    case R.id.entremeses: 
     Intent myIntent=new Intent(this,PlantillaChina.class); 
     myIntent.putExtra("entremeses", "entremeses"); 
     this.startActivity(myIntent); 
     break; 
    case R.id.arrocesypasta: 
     Intent myIntent2=new Intent(this,PlantillaChina.class); 
     myIntent2.putExtra("arroces", "arroces"); 
     this.startActivity(myIntent2); 
     break; 
    case R.id.pescados: 
     Intent myIntent3=new Intent(this,PlantillaChina.class); 
     myIntent3.putExtra("mar", "mar"); 
     this.startActivity(myIntent3); 
     break; 
    case R.id.carnes: 
     Intent myIntent4=new Intent(this,PlantillaChina.class); 
     myIntent4.putExtra("carnes", "carnes"); 
     this.startActivity(myIntent4); 
     break; 

    } 


    return super.onOptionsItemSelected(item); 
} 

}

Спасибо и наилучшие пожелания

+0

привет у вас есть возможность для видимости на и off.Just вы кладете же как ListView в таком же положении и первый видимостью время ушел второй lv.when второй раз вам нужен другой, который вы видимую второй один первый один ушел, просто и лучшая идея: – Saveen

+1

использовать метод notifydatasetchanged() вместо того, чтобы называть такую ​​же активность более одного раза. передайте соответствующий аргумент вашим данным адаптера и просто обновите свой список в onOptionsItemSelected, вместо того, чтобы называть такую ​​же активность. – mcd

+0

выполните точно так же, как @mcd сказал, это ваше решение – Elltz

ответ

0

Что-то застряло в моей голове, и я полагаю, это причина вашей проблемы. getStringExtra() и putExtra() методы используют пары ключевых значений, а ваш оператор if-else имеет странную структуру. Почему бы нам не попробовать это, как внизу?

public class PlantillaChina extends ActionBarActivity{ 

// DB Class to perform DB related operations 
DBController controller = new DBController(this); 
// Progress Dialog Object 
ProgressDialog prgDialog; 
HashMap<String, String> queryValues; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.lista); 

    Intent myIntent = getIntent(); 
    String value = myIntent.getStringExtra("key"); 

// Get plato records from SQLite DB 

    ArrayList<HashMap<String, String>> platoList = new ArrayList<HashMap<String, String>>(); 
    if (value.equals("entremeses")){ 
     platoList = controller.getAllEntremeses(); 
    }else if(value.equals("arroces")){ 
      platoList = controller.getAllArrocesyPasta(); 
     }else if(value.equals("mar")){ 
       platoList = controller.getAllMar(); 
      }else if(value.equals("carnes")){  
         platoList = controller.getAllCarnes(); 
      } 
    // If plato exists in SQLite DB 
    if (platoList.size() != 0) { 
     // Set the plato Array list in ListView 
     ListAdapter adapter = new SimpleAdapter(PlantillaChina.this, platoList, R.layout.itemlista, new String[] { 
         "platoNombre", "platoDescripcion", "platoPrecio" }, new int[] { R.id.nombre, R.id.descripcion, R.id.precio }); 
     ListView myList = (ListView) findViewById(R.id.listaplatos); 
     myList.setAdapter(adapter); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.china, menu); 
    return true; 
} 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
// int id = item.getItemId(); 
    // if (id == R.id.action_settings) { 
    // return true; 
    switch (item.getItemId()){ 
    case R.id.entremeses: 
     Intent myIntent=new Intent(this,PlantillaChina.class); 
     myIntent.putExtra("key", "entremeses"); 
     this.startActivity(myIntent); 
     break; 
    case R.id.arrocesypasta: 
     Intent myIntent2=new Intent(this,PlantillaChina.class); 
     myIntent2.putExtra("key", "arroces"); 
     this.startActivity(myIntent2); 
     break; 
    case R.id.pescados: 
     Intent myIntent3=new Intent(this,PlantillaChina.class); 
     myIntent3.putExtra("key", "mar"); 
     this.startActivity(myIntent3); 
     break; 
    case R.id.carnes: 
     Intent myIntent4=new Intent(this,PlantillaChina.class); 
     myIntent4.putExtra("key", "carnes"); 
     this.startActivity(myIntent4); 
     break; 

    } 


    return super.onOptionsItemSelected(item); 
} 
+0

Привет, это сработало спасибо! – Avashiva

+0

Спасибо за отзыв, я рад, что смог помочь. Это редкий случай, который я предполагаю. Я думаю, что источником вашей проблемы является экземпляр, содержащий ваши пары ключ-значение. Поскольку вы ссылаетесь на одну и ту же активность, экземпляр не уничтожается. Нечто подобное вниз может происходить, если бы вы выбрали вариант 2 после того, как вариант 1. entremeses - entremeses arroces - arroces мар - нуль Carnes - нуль Вместо: entremeses - нуль arroces - arroces mar - null carnes - null И поскольку вы проверяете разные ключи с помощью инструкции if, первый параметр всегда возвращает true. –

Смежные вопросы