2017-05-02 4 views
0

Ich habe eine Nachrichtenaktivität, in der es eine Liste von Nachrichten gibt. Ich möchte, dass ein Benutzer Nachrichten aus der Liste auswählt und ihn auf die news_details Seite leitet, wo ich die Details über die ausgewählte Nachrichten, aber wenn der Benutzer die Nachrichten auswählt, geht das Programm schnell zu news_details und kommt wieder zu den Nachrichten zurück.Übergeben des ausgewählten Objekts an eine andere Aktivität

News: 

    public void Listen() { 

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { // ana sayfada herhangi bir item seçildiğinde 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 


      NewsItem selectedNews = (NewsItem) parent.getItemAtPosition(position); 
      Intent i = new Intent(MainActivity.this, News_Details_Activity.class); 
      i.putExtra("title", selectedNews.getTitle()); 
      i.putExtra("date", selectedNews.getNewsDate().toString()); 
      i.putExtra("image_id", selectedNews.getImageId()); 
      i.putExtra("text", selectedNews.getText()); 
      setResult(RESULT_OK, i); 
      startActivity(i); 




     } 

    }); 
} 


    News_Details: 

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

    Intent i = new Intent(this,MainActivity.class); 

    startActivityForResult(i, GET_NEWS); 

} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == GET_NEWS) { // Check which request we're responding to 

     if (resultCode == RESULT_OK) { // Make sure the request was successful 

      title.setText(data.getStringExtra("title")); 
      date.setText(data.getStringExtra("date")); 
      news_img.setImageResource(data.getIntExtra("image_id", 0)); 
      news_text.setText(data.getStringExtra("text")); 


     } 

    } 
} 
} 

Antwort

1

allererst, entfernen diese Zeile:

setResult(RESULT_OK, i); 

Auch diese Zeile von News Aktivität entfernen:

startActivityForResult (i, GET_NEWS);

Änderungen vornehmen, wie unten:

public void Listen() { 

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      NewsItem selectedNews = (NewsItem) parent.getItemAtPosition(position); 
      Intent i = new Intent(MainActivity.this, News_Details_Activity.class); 
      i.putExtra("title", selectedNews.getTitle()); 
      i.putExtra("date", selectedNews.getNewsDate().toString()); 
      i.putExtra("image_id", selectedNews.getImageId()); 
      i.putExtra("text", selectedNews.getText()); 
      startActivity(i); 
     } 

    }); 
} 

Dann Aktivität in Ihrer News Detail:

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

    Intent i = getIntent(); 
    String title = i.getStringExtra("title"); 
    String date = i.getStringExtra("date"); 
    int imageId = i.getIntExtra("image_id"); 
    String text = i.getStringExtra("text"); 
} 

onActivityResult Verfahren nicht erforderlich ist, so einfach zu entfernen.

FYI:

startActivity und startActivityForResult sie beide neue Aktivitäten starten, aber startActivityForResult wie der Name schon sagt, dass Sie ein Ergebnis aus der Aktivität erwarten Sie beginnen. Und dieses Ergebnis soll in onActivityResult Methode erhalten werden.

Angenommen, Sie möchten Activity2 aus Activity1 starten und einige Daten zurück zu Activity1 übergeben, während Activity2 beendet wird. Sie setzen einfach das Ergebnis in Activity2 mit der Methode setResult(). und während Activity1 wieder fortgesetzt wird, wird onActivityResult() aufgerufen, Sie überschreiben onActivityResult() in Activity1, um das Ergebnis Activity2 zu erhalten.

Ich hoffe, Sie sind jetzt klar darüber.

+0

Wenn ich die startActivityForResult (i, GET_NEWS) zu entfernen; Funktioniert protected void onActivityResult (int requestCode, int resultCode, Intent-Daten) ordnungsgemäß? –

+0

Es funktioniert Danke. Wann sollten wir die Startaktivität nutzen? –

+0

@ayt_cem Ich habe eine Erklärung für Ihre Informationen hinzugefügt. –

0

String-Wert senden

NewsItem selectedNews = (NewsItem) parent.getItemAtPosition(position); 
     Intent i=new Intent(MainActivity.this, News_Details_Activity.class); 
     i.putExtra("title", selectedNews.getTitle()); 
     i.putExtra("date", selectedNews.getNewsDate().toString()); 
     i.putExtra("image_id", selectedNews.getImageId()); 
     i.putExtra("text", selectedNews.getText()); 
     startActivity(i); 

in News_Details_Activity zu empfangen

Intent i = getIntent(); 
    title = i.getStringExtra("title"); 
    date= i.getStringExtra("date"); 
    text= i.getStringExtra("text"); 
+0

Ja, das ist, wie Sie Daten zu einer anderen Absicht übergeben, aber es ist keine Antwort auf das Problem der OP hat – Denny

0

Sie können es Serializable tun mit über folgende

public class Nachrichten implementiert Serializable {

String title; 
String desc; 
String time,imageUrl; 

}

Dann Nachrichten Liste Aktivität

Intent i = new Intent(MainActivity.this, News_Details_Activity.class); 
     i.putExtra("news",newsObject); 

und bekommt es onCreate von Newsdetail

News news=(News) getIntent().getExtras().getSerializable("news"); 
and user it like title.setText(news.getTitle()); 
0

make Nachrichten-Klasse, die Serialazable implementiert

neues Objekt der Nachrichten-Klasse erstellen, und in Absicht als putSerialazable();

in Ihrer zweiten Aktivität nur GetIntent(). GetSerialazable ("Schlüssel") und legen Sie Ihre Daten auf Ansichten.

1
Remove these lines 
setResult(RESULT_OK, i); 
Intent i = new Intent(this,MainActivity.class); 
startActivityForResult(i, GET_NEWS); 

Verwenden Sie Google Gson zum Serialisieren des Objekts.

NewsItem selectedNews = (NewsItem) parent.getItemAtPosition(position); 
    String strNews = new Gson().toJson(selectedNews); 

    Intent i = new Intent(MainActivity.this, News_Details_Activity.class); 
       i.putExtra("news", strNews); 
       startActivity(i); 

Auf der anderen Seite Nachrichten Details onCreate() tun dies

Bundle bundle = getIntent().getExtras(); 
    String newsStr = bundle.getString("news"); 
      Gson gson = new Gson(); 
      Type type = new TypeToken<NewsItem>() { 
      }.getType(); 
      NewsItem selectedNews = gson.fromJson(newsStr, type); 
Verwandte Themen