2016-04-15 4 views
1

Ich versuche, Daten von einer Aktivität zu einer anderen zu senden und Toast auch zu zeigen, wenn die Taste gedrückt wird Ich versuche, beide zur gleichen Zeit zu erreichen ich zugewiesen die Taste ist add_to_cart und ich versuchte, darunter Code und ich habe nichtErstellen einer Schaltfläche zum Anzeigen eines Toast und Senden von Daten an eine andere Aktivität

Button customToastButton = (Button) this.findViewById(R.id.add_to_cart); 
    customToastButton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      //get the LayoutInflater and inflate the custom_toast layout 
      LayoutInflater inflater = getLayoutInflater(); 
      View layout = inflater.inflate(R.layout.cart_toast, (ViewGroup) 
        findViewById(R.id.toast_layout_root)); 

      //get the TextView from the custom_toast layout 
      TextView text = (TextView) layout.findViewById(R.id.toastText); 
      text.setText("Item as been added to cart"); 

      //create the toast object, set display duration, 
      //set the view as layout that's inflated above and then call show() 
      Toast t = new Toast(getApplicationContext()); 
      t.setDuration(Toast.LENGTH_SHORT); 
      t.setView(layout); 
      t.show(); 


      Bundle intent = getIntent().getExtras(); 
      if (intent != null) { 
       firstname= intent.getString("Gladwin"); 
       secondname= intent.getString("james"); 
      } 



     } 

    }); 

der Toast Teil funktioniert gut funktionieren, aber nicht der Datenteil sendet und ich versuchte Implementierung separat diesen Code die Daten zu senden, war aber nicht responsive und unten ist der Code, den ich verwende, um die gesendeten Daten zu empfangen

private String firstname; 
private String secondname; 

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


    TextView txtFirst=(TextView)findViewById(R.id.text1); 
    txtFirst.setText(firstname); 
    TextView txtSecond=(TextView)findViewById(R.id.textview1); 
    txtSecond.setText(secondname); 

und dies ist der XML-Teil des Aufnahme Ende

<TextView 
    android:id="@+id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="15dp" 
    android:layout_marginTop="10dp" 
    android:text="" 
    android:textSize="20sp" /> 
<TextView 
    android:layout_below="@+id/text1" 
    android:id="@+id/textview1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="15dp" 
    android:layout_marginTop="10dp" 
    android:text="" 
    android:textSize="20sp" /> 

Ich weiß, dass es eine gibt viele Anfängerfehler leid, dass tho

+1

haben Sie die Aktivität geöffnet, die die Absicht empfängt, bevor auch die Absicht vorbei? – Opiatefuchs

+0

Ja, ich könnte nur, wenn ich den Code wie diese 'öffentliche void add_to_cart (View anzeigen) { Intent nextIntent = neue Absicht (this, Warenkorb.Klasse); startActivity (nextIntent); } ' – Eggsy

+0

ok, es ist möglich, dass die Aktivität noch geöffnet ist und nicht die Absicht hat. Wenn ja, müssen Sie entweder diese Empfangsaktivität beenden, wenn Sie sie verlassen, oder auf andere Weise die geschützte Methode onNewIntent() überschreiben und sie dort abfangen. Dann müssen Sie das Attribut singleTop in Ihrem Manifest auf diese Aktivität setzen. – Opiatefuchs

Antwort

1

Also, lasst sie annehmen, dass Sie die Activity geöffnet haben, die die intent erhalten sollen vor . Das Problem hier ist, dass wenn Sie diese activity verlassen und nicht finish es, es ist noch am Leben, solange das System nicht viel Ressourcen benötigt. Also, dann gehst du zum nächsten activity, wo du die Absicht sendest und beginne wieder activity zu empfangen. Aber hier ist der Trick: Die activity kommt gerade zurück zum Bildschirm, war aber noch nie gestorben. So wird die intent nicht empfangen. Tun Sie es auf diese Weise

Senden der intent:

public class SendingActivity extends Activity { 

    button.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v){ 

      Intent testIntent = new Intent(SendingActivity.this, ReceivingActivity.class); 
      testIntent.putExtra("firstname","Eggsy"); 
      testIntent.putExtra("lastname","Iggsy"); 
      startActivity(testIntent); 
     } 
    }); 
    } 

Empfangen intent im activity und finish nach dem Verlassen:

public class ReceivingActivity extends Activity { 

//make TextView objects 
private TextView txtFirst; 
private TextView txtSecond; 

     @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_activty_xml); 

     //initialize textViews <-- this has to be done with all views 
     txtFirst = (TextView)findViewById(R.id.yourFirstTextViewId); 
     txtSecond = (TextView)findViewById(R.id.yourSecondTextViewId); 


     Intent intent = getIntent(); 
     String firstName = intent.getStringExtra("firstname"); 
     if(firstName!=null){ 
     txtFirst.setText(firstName); 
     } 
     String lastName = intent.getStringExtra("lastname"); 
     if(lastName!=null){ 
     txtSecond.setText(lastName); 
     } 

     } 

     @Override 
     onBackPressed(){  
     finish(); 
     super.onBackPressed(); 
     }   
    } 

Von aktualisiert Frage, ich glaube, Sie haben eine allgemeine Problem mit der Reihenfolge der activities lifecycle zu verstehen. OnCreate() wird beim Start von activity aufgerufen und die views werden gesetzt. Die String variables, die Sie auf die textView festgelegt haben, wird nicht automatisch geändert, Sie müssen es in Ihrer button click method tun. So sollte obiges Beispiel zu Ihrem onClick hinzugefügt werden, wenn Sie es zu Beginn mögen nicht, dass tun, direkt:

@Override 
public void onClick(View v){ 

Intent intent = getIntent(); 
String firstName = intent.getStringExtra("firstname"); 
if(firstName!=null){ 
    txtFirst.setText(firstName); 
    } 

String lastName = intent.getStringExtra("lastname"); 
if(lastName!=null){ 
    txtSecond.setText(lastName); 
    } 
} 
+0

Ich hoffe, es macht Ihnen nichts aus, wenn ich frage, warum txtFirst und txtSecond hell sind und sagen, dass das Symbol nicht aufgelöst werden kann – Eggsy

+1

Sie müssen die Objekte in Ihrer Aktivität erstellen, siehe meine Bearbeitung in der ReceiveActivity. Diese textViews müssen Sie mit den IDs Ihres Layout-XML beziehen. So wie du es mit all deinen Ansichten in deinem Layout machen musst. – Opiatefuchs

+0

Vielen Dank, dass ich so viel von dir an einem Tag gelernt habe und ich schätze deine Geduld sehr und unterstütze dich, dass du mich die ganze Zeit gästest. Nochmals vielen Dank – Eggsy

0

In Datenseite tun, wie diese empfangen ....

private String firstname; 
    private String secondname; 
    Bundle bundle = getIntent().getExtras(); 
      if (bundle != null) { 
       firstname= bundle.getString("firstname"); 
       secondname= bundle.getString("Secondname"); 
      } 

    TextView txtFirst=(TextView)findViewById(R.id.text1); 
    txtFirst.setText(firstname); 
    TextView txtSecond=(TextView)findViewById(R.id.textview1); 
    txtSecond.setText(secondname); 
+0

@Eggsy Es ist die sicherere Möglichkeit, das Bundle vor dem Zuweisen der Werte zum String ... –

+0

How um das oben genannte in der zweiten Aktivität zu nennen, wird der Code, den ich zur Verfügung gestellt habe, genug sein .. ???? – Eggsy

+0

Jetzt wurde ich wie dieses "Vorname" "zweiter Name" gedruckt es tatsächlich nicht den tatsächlichen Namen holen – Eggsy

1

Um Daten aus anderen Aktivitäten zu erhalten:

Intent intent = new Intent(currentactivity.this, targetactivity.class); 
       intent.putExtra("XXX", value); 

Sie benötigen einen String-Wert, in th Fall ist: Text und ein String-Name in diesem Fall: uid

dann die uid in einer anderen Aktivität zu erhalten:

String uid = getIntent().getExtras().getString("XXX"); 
+0

Es sagt, kann Methode nicht auflösen ("uid", Text); – Eggsy

+0

@Eggsy, weil das mein Code ist. lass mich den Code bearbeiten. Bei der Bearbeitung muss XXX in den gewünschten Wert geändert werden. Der Wert ist dann der Wert, den Sie in die andere Aktivität übernehmen möchten. – Robbert

Verwandte Themen