2011-07-04 9 views
0

2つのリストビューで問題が発生しています。それぞれがアクティビティによって生成されました。リストビューAのアイテムリストから、リストAの特定のアイテムのリストビューBに行くことができます。Android:リストビューからリストビューに戻るときの問題

問題は、私がAからBに移動し、 )その後、A、再びBに移動しようとすると: ( - >Bからバックボタン - > - >エラーBに移動しようとしています)。

バグの検索をどこから開始するのか本当に分からないので、ここで質問したかったのです。同じエラーが発生した誰もが解決策を共有できるのですか?

ありがとうございます!

EDIT:

LISTVIEW::私は私は2つのリストビューを掲示し、私はバグを引き起こしている可能性がありますかわからない言ったように私は、ここに関連するコードを掲載してい それはイメージを持っています、緊急事態のタイトルと距離の詳細。

public class EmergenciesList extends ListActivity { 
String[] listaEmergencias = new String[] { "Raoul Duffy con Wisconsin", 
     "Mac Iver con Moneda", "Cdte. Malbec con Barnechea", 
     "Av. Apoquindo con Pehuen", "Las Hualtatas con Indiana" }; 

String[] detalleEmergencias = new String[] { "< 50 mts", "2 km", "1,2 km", 
     "3,4 km", "350 mts" }; 

private Integer[] imgid = { R.drawable.chico, R.drawable.mediano, 
     R.drawable.grande, R.drawable.chico, R.drawable.mediano, 
     R.drawable.grande }; 

RelativeLayout layr1; 
Animation ar3; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    data = new Vector<RowData>(); 

    for (int i = 0; i < listaEmergencias.length; i++) { 
     try { 
// RowData is just a private class for the title, details, and image. 
      rd = new RowData(i, listaEmergencias[i], detalleEmergencias[i]); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     data.add(rd); 
    } 

    adapter = new CustomAdapter(this, R.layout.second_list, R.id.title, data); 
    setListAdapter(adapter); 
    getListView().setTextFilterEnabled(true); 
} 

public void onListItemClick(ListView parent, View v, int position, long id) { 
    adapter = (CustomAdapter) parent.getAdapter(); 
    data.removeAllElements(); 

    Intent singleEmergencyMenu = new Intent(EmergenciesList.this, EmergencyMenu.class); 
    Bundle container = new Bundle(); 
    container.putInt("id", position); 
    singleEmergencyMenu.putExtra("data2", container); 
    startActivity(singleEmergencyMenu); 
} 
} 

リストビューB:これは、ヘッダのチェックボックス、リストの三つの要素を有しています。問題は、あなたの意図を実装する予定です

public class EmergencyMenu extends ListActivity { 
String[] emergencia = new String[] { "Mostrar ubicación", 
     "Carros asignados", "Archivos" }; 
final String SETTING_EMERGENCY = "id_actual_emergency"; 
private int emergencyID = -1; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    this.emergencyID = getIntent().getBundleExtra("data2").getInt("id"); 

    ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 

    // A Header to have a single checkbox to select the emergency 
    LayoutInflater inflater = (LayoutInflater) this 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    TextView header = (TextView) inflater.inflate(
      R.layout.list_reports_header, null); 
    lv.addHeaderView(header, null, false); 

    List<String> data = new ArrayList<String>(); 

    for (int i = 0; i < emergencia.length; i++) { 
     try { 
      data.add(emergencia[i]); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 

    setListAdapter(new ArrayAdapter<String>(this, R.layout.emergency_menu, 
      data)); 

    LoadSelection(); 

    CheckBox checkBox = (CheckBox) findViewById(R.id.select_emergency_id); 
    checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      SaveSelection(); 
     } 
    }); 

    lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      // Mostrar ubicación 
      if (position == 1) { 
       Toast.makeText(getApplicationContext(),"Mostrar ubicación", Toast.LENGTH_SHORT).show(); 
      } 

      // Carros asignados 
      else if (position == 2) { 
       Toast.makeText(getApplicationContext(), "Carros asignados",Toast.LENGTH_SHORT).show(); 
      } 

      // Archivos 
      else if (position == 3) { 
       Toast.makeText(getApplicationContext(), 
         "Archivos de la emergencia",Toast.LENGTH_SHORT).show(); 
      } 

     } 
    }); 
} 

@Override 
protected void onPause() { 
    SaveSelection(); 
    super.onPause(); 
} 

// save the selections in the shared preference in private mode for the 
// user 
private void SaveSelection() { 
    CheckBox checkBox = (CheckBox) findViewById(R.id.select_emergency_id); 
    if (checkBox.isChecked()) { 
     SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE); 
     SharedPreferences.Editor prefEditor = settingsActivity.edit(); 
     prefEditor.putInt(SETTING_EMERGENCY, emergencyID); 
     prefEditor.commit(); 
    } 
} 

// Check the checkbox if this is the actual emergency (selected before). 
private void LoadSelection() { 
    SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE); 

    if (settingsActivity.contains(SETTING_EMERGENCY)) { 
     // Checkbox de seleccionar la emergencia 
     int id_actual = settingsActivity.getInt(SETTING_EMERGENCY, -1); 
     if (emergencyID == id_actual) { 
      CheckBox checkBox = (CheckBox) findViewById(R.id.select_emergency_id); 
      checkBox.setChecked(true); 
     } 
    } 
} 

}

+0

スタックトレースの表示について – mibollma

+0

どうすれば入手できますか?私は昨日試しましたが、Eclipseコンソールではアプリのデプロイメントを電話でしか見せなかったので、ログを見つけることができませんでした。それが関連しているなら、私はマックにいる。 – Tere

答えて

0

たぶん、あなたは、この方法では、あなたがそれを作成し、クラスでそれを宣言する必要があります。あなたは実行する方法でコードを投稿することができます

+0

2つのリストビューのコードを追加しました。リストビューA( "EmergenciesList")のonListItemClickにインテントが表示されます。私はそれをやってその方法で私のアプリの他の意図に問題がなかった... – Tere

0

あなたは毎回B ListViewを構築しているのでしょうか、それともそれを表示していますか?たぶん、BACKボタンがそれを "殺している"とし、それを再び表示しようとすると、それはヌルであるか、何かを指しています。関連するコードとエラーを表示してください。ログを使用して値をトレースするなど、常に良いことです。私はこの特定の問題を抱えていません。

+0

私はコードを表示する質問を編集しました。あなたの質問に答えると、私は "onPause()"イベントを処理しましたが、それは問題を解決しませんでした...またはBリストビューが殺されずに再開されたことを保証できる何か他に何かありますか? – Tere

+0

これは私のリーグ外です。あなたが以前にやったことのない複数の活動があるようです。それでも、「戻る」ボタンを「キャッチ」(http://stackoverflow.com/questions/2000102/android-override-back-button-to-act-like-home-button)するか、あなた自身の "戻る"ボタンであなたはコントロールを持っています。 BACKは、私が学んだように、実際には*終了*アクティビティを意味します - onPause()は呼び出されないかもしれません。とにかくどんなエラーが出ますか?それとも、うまくいきませんか? – karnok

+0

私が理解しているように、戻るボタンはonPause()イベントをトリガし、他のプロセスがより多くのメモリを必要とする場合やアクティビティのライフサイクルを見ていない場合、アクティビティは強制終了されます(http://developer.android.com/reference/android /app/Activity.html)。私はマニュアルを戻そうとしたが、それは動作します! (ありがとう:))しかし、私は本当に何が問題なのか知りたいです(Androidの原則の1つに「バックボタンを盗んではいけないので重要だと思っています...」)。私はどんなエラーも出ません、それはちょうど作業を停止し、ログを取得する方法がわかりません... – Tere

関連する問題