2009-08-10 20 views
0

Comment obtenir la valeur de EditText de la sous-activité? Avec une condition que si je clique sur le bouton de retour sur le téléphone, il n'y a pas d'erreur dans la sous-activité?Obtenir la valeur de EditText de la sous-activité

Ceci est mon Sous-activité Code:

public class SBooksSearch extends Activity { 
    private EditText mTextSearch; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.sbooks_search); 

     mTextSearch = (EditText)findViewById(R.id.edit_search);  
     Button searchButton = (Button)findViewById(R.id.btn_search);   

     searchButton.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v){     
       Intent data = new Intent();    
       data.putExtra(SBooksDbAdapter.KEY_TITLE_RAW, mTextSearch.getText().toString());   
       setResult(RESULT_OK, data); 
       finish(); 
      } 
     }); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState){ 
     super.onSaveInstanceState(outState);   
    } 
    @Override 
    protected void onPause(){ 
     super.onPause(); 

    } 
    @Override 
    protected void onResume(){ 
     super.onResume();  
    } 
} 

Ceci est mon Activité-Résultat:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent){ 
super.onActivityResult(requestCode, resultCode, intent);   
switch(requestCode){ 
case ACTIVITY_SEARCH: 
Bundle extras = getIntent().getExtras(); 
mTitleRaw = extras != null ? extras.getString(SBooksDbAdapter.KEY_TITLE_RAW) : null;    
    if(mTitleRaw!=null){ 
     Cursor cursor = mDbHelper.searchData(mTitleRaw); 

    String[] from = new String[]{ SBooksDbAdapter.KEY_ROWID, 
         SBooksDbAdapter.KEY_TITLE, SBooksDbAdapter.KEY_LYRICS }; 
     int[] to = new int[]{ R.id.id, R.id.title, R.id.lyrics }; 
     SimpleCursorAdapter adapter = 
        new SimpleCursorAdapter(this, R.layout.sbooks_row, cursor, from, to); 
      setListAdapter(adapter); 
      }   
      break; 
     } 
    } 
+0

Vous voulez renvoyer une chaîne à l'activité d'appel? startActivityForResult (...) & setResult (resultCode, data) alors. – yanchenko

+0

Je veux obtenir la valeur String de TextView dans la sous-activité. Mais quand j'ouvre la sous-activité et puis je clique sur le bouton de retour sur le téléphone, il jette une erreur d'exception. Le problème est lorsque j'essaie de résoudre l'erreur d'exception (gérer le cycle de vie de l'activité), il n'y a plus d'exception, mais je ne peux pas obtenir la valeur String !!! Alors, comment puis-je obtenir la chaîne et appuyer sur le bouton de retour sur le téléphone sans exception? – Dennie

+0

Pouvez-vous poster des extraits de code pour qu'il soit plus facile de comprendre exactement ce que vous essayez et pourquoi un appel startActivityForResult ne répondra pas à vos besoins? – MattC

Répondre

1

Tout d'abord, vous ne devriez pas être essayé toute sorte de action si l'utilisateur frappe le bouton "retour". C'est un bouton global qui veut dire «sors-moi d'ici maintenant», et il est généralement compris que l'utilisateur ne veut rien d'autre que de revenir en arrière sur un écran à la suite de cela.

Donc ce que vous devez faire est dans votre searchButton.setOnClickListener, dans le onClick, créer un vide intention comme ceci:

Intent data = new Intent(); 

Ensuite, vous devez être en ajoutant la valeur de votre EditText en tant que valeur ajoutée , comme ceci:

data.putExtra(SBooksDbAdapter.KEY_TITLE_RAW, mTextSearch.getText().toString()); 

Enfin, inclure cette intention dans votre appel setResult:

setResult(RESULT_OK, data); 

Dans votre onActivityResult, sortez la valeur de l'intention comme vous le faites déjà et ça devrait aller.

+0

Merci MattC, mais j'essaie avec votre code mais je ne sais pas pourquoi il n'y a rien sur mon ListView après avoir cliqué sur le bouton "Rechercher"? Je pense qu'il n'y a pas de recul des données, avez-vous une idée à ce sujet? – Dennie

+0

Si vous déboguez le code et définissez un point d'arrêt, la valeur renvoyée par extras.getString (SBooksDbAdapter.KEY_TITLE_RAW) correspond-elle à la valeur figurant dans la zone EditText? – MattC

+0

Après le débogage, la valeur renvoyée est "null". Je ne sais pas pourquoi? – Dennie