Je suis confus et je n'ai aucune idée de la façon d'utiliser les startActivityResults et setResults pour obtenir des données de l'activité précédente. J'ai une classe de vue et une classe d'activité.
Fondamentalement, dans ma classe de vue, j'ai cette boîte de dialogue et elle démarre réellement la classe d'activité appelée la classe colorActivity. Lorsque l'utilisateur sélectionne oui également, il transmet le nom du cercle sélectionné à la classe colorActivity. À la classe colorActivity, les utilisateurs sont autorisés à entrer le code de couleur pour un cercle particulier et je voudrais transmettre le code de couleur à la classe de vue. J'ai des problèmes pour transmettre des valeurs de l'activité vers la vue à l'aide de la méthode startActivityForResult et setResult. En plus, comment utiliser les données récupérées après cela?
mon code est le suivant
Code Ontouchevent de ma classe view:
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getX();
y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
for (int i = 0; i < circles.size(); i++) {
if (circles.get(i).contains(x, y)) {
circleID = i;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new Builder(
getContext());
final EditText text = new EditText(getContext());
builder.setTitle("Adding colors to circles").setMessage(
"Proceed to Enter color");
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di,
int i) {
Intent intent = new Intent(
getContext(),
colorActivity.class);
intent.putExtra("circlename", circleNameList.get(circleID));
startActivityForResults(intent, 1); // error incurred here : The method startActivityForResult(Intent, int) is undefined for the type new DialogInterface.OnClickListener(){}
}
});
builder.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di,
int i) {
}
});
builder.create().show();
}
}, 3000);
break;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) { // Please, use a final int instead of hardcoded
// int value
if (resultCode == RESULT_OK) {
ccode = (String) data.getExtras().getString("colorcode");
}
}
}
public static String getColorCode() {
return ccode;
}
Dans la colorActivity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_ecolor);
circlenametextview = (TextView)findViewById(R.id.circlenametextview);
String circlename = super.getIntent().getStringExtra("circlename");
circlenametextview.setText(circlename);//get the circle name
savebutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(colorActivity.this, ?????);//how to return back to the view class?
colorcode = colorEditText.getText().toString();// I am able to get value right up till this point
Intent resultIntent = new Intent();
resultIntent.putExtra("colorcode", colorcode );
setResult(Activity.RESULT_OK, resultIntent);
finish();
}// onclick
});
}
Après avoir corrigé l'autre code pour pouvoir exécuter le programme, vous pouvez récupérer les paramètres de votre activité colorActivity
de cette manière:
Intent resultIntent = new Intent();
resultIntent.putExtra("NAME OF THE PARAMETER", valueOfParameter);
...
setResult(Activity.RESULT_OK, resultIntent);
finish();
Substitution de @onActivityResult(...)
.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) { // Please, use a final int instead of hardcoded int value
if (resultCode == RESULT_OK) {
String value = (String) data.getExtras().getString("NAME OF THE PARAMETER");
Références
essayez d'utiliser
ActivityName.this.startActivityForResult(intent,int)
Oh, et 1 petite chose, dans votre code que vous avez utilisé
startActivityForResults (intention, int) ..remplacez cela par
startActivityForResult (intention, int)