2010-11-17 7 views
0

J'ai cherché et cherché et je ne peux pas obtenir ce code pour travailler. J'ai une disposition de main.xml et un setting.xml. J'ai quelques valeurs que je voudrais que le Settings.class change dans ma classe d'applications principale. Trois chaînes pour être exact.Passer des valeurs avec des intentions

J'ai essayé ce code de test simple dans ma classe principale de l'application

settings.setOnClickListener(new OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
    Intent intent = new Intent(v.getContext(), Settings.class); 
    startActivityForResult(intent, 0); 


    } 
    }); 

//Then a function 
@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent){ 
     super.onActivityResult(requestCode, resultCode, intent); 
     Bundle extras = intent.getExtras(); 
     String value = extras.getString("myKey"); 
     if(value!=null){ 
     Log.d("hmmm",value); 
     } 
    } 
} 

Dans mon settings.class j'ai les suivantes

returnHome.setOnClickListener(new OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
    Intent intent = new Intent(); 
    intent.putExtra("myKey", "YEAH"); 
       setResult(RESULT_OK, intent); 
       finish(); 


    } 

     }); 

Retour en classe principale de l'application, il ne reçoit pas connecté.

Comme je l'ai dit, j'ai trois chaînes dans la classe principale que je veux que la classe de paramètres à modifier et à renvoyer. Toute aide est grandement appréciée

+0

Après un rapide coup d'œil, votre code semble correct - sur intérêt, votre fichier manifeste, définissez-vous un 'android: launchMode' spécifique pour votre activité principale ou votre activité Paramètres? – Scoobler

Répondre

1

J'ai eu du succès avec la technique utilisée dans le Notepad tutorial où l'information est placée dans un Bundle et ensuite ajouté à l'intention. Voir Étape 10:

Bundle bundle = new Bundle(); 

bundle.putString(NotesDbAdapter.KEY_TITLE, mTitleText.getText().toString()); 
bundle.putString(NotesDbAdapter.KEY_BODY, mBodyText.getText().toString()); 
if (mRowId != null) { 
    bundle.putLong(NotesDbAdapter.KEY_ROWID, mRowId); 
} 

Intent mIntent = new Intent(); 
mIntent.putExtras(bundle); 
setResult(RESULT_OK, mIntent); 
finish(); 
0

Votre code fonctionne bien pour moi, voici le tout

Main.java

package com.test; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class Main extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button settings = (Button) findViewById(R.id.settings); 
     settings.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(v.getContext(), Settings.class); 
      startActivityForResult(intent, 0); 
     } 
     }); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, 
     Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 
     Bundle extras = intent.getExtras(); 
     String value = extras.getString("myKey"); 
     if (value != null) { 
     Log.d("hmmm", value); 
     } 
    } 
} 

Settings.java

package com.test; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class Settings extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.settings); 
     Button returnHome = (Button) findViewById(R.id.returnHome); 
     returnHome.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(); 
      intent.putExtra("myKey", "YEAH"); 
      setResult(RESULT_OK, intent); 
      finish(); 
     } 
     }); 
    } 
} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <Button 
      android:text="Settings" 
      android:id="@+id/settings" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"></Button> 
</LinearLayout> 

settings.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <Button 
      android:text="Return home" 
      android:id="@+id/returnHome" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"></Button> 
</LinearLayout> 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.test" 
     android:versionCode="1" 
     android:versionName="1.0"> 
     <application 
      android:icon="@drawable/icon" 
      android:label="@string/app_name"> 
      <activity 
        android:name=".Main" 
        android:label="@string/app_name"> 
        <intent-filter> 
         <action 
           android:name="android.intent.action.MAIN" /> 
         <category 
           android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
      </activity> 
      <activity 
        android:name="Settings" 
        android:label="Settings" /> 
     </application> 
</manifest> 

Et le logcat est sorti:

11-17 12:21:46.717: DEBUG/hmmm(258): YEAH 
+0

Je l'ai eu en travaillant en utilisant des paquets, Strange ne fonctionnerait toujours pas en utilisant ci-dessus.Merci de prendre le temps de taper tout cela. – James

Questions connexes