2017-05-02 57 views
0

我有新闻活动,其中有news.I列表想让用户从列表中选择一个消息,指导他到news_details页面,在这里我提供有关的细节但是当用户选择新闻时,节目会迅速转到news_details并重新回到新闻。所选对象传递到另一个活动

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")); 


     } 

    } 
} 
} 

回答

1

首先,删除此行:

setResult(RESULT_OK, i); 

另外,从newsdetails活动删除此行:

startActivityForResult(I,GET_NEWS);

进行更改如下:

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); 
     } 

    }); 
} 

然后,在您的新闻信息的活动:不需要

@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方法,以便直接将其移除。

FYI:

startActivitystartActivityForResult他们两个开始新的活动,但startActivityForResult顾名思义是你期望从你开始活动的结果。并且该结果应在onActivityResult方法中获得。

比方说,你想从活动1开始活性2,和你想通过一些数据恢复活性1一边整理活性2。您只需使用setResult()方法在Activity2中设置Result。同时活动1再次恢复,其onActivityResult()将被调用,您将覆盖活动1 onActivityResult()要接收结果通过活性2集。

希望你现在就清楚了。

+0

当我删除了startActivityForResult(I,GET_NEWS); protected void onActivityResult(int requestCode,int resultCode,Intent data)是否正常工作? –

+0

它的工作原理谢谢。那我们什么时候应该用startactivityforresult? –

+0

@ayt_cem我为您的信息添加了一些解释。 –

0

发送字符串值

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); 

通过以下方式News_Details_Activity到收到

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

是的,这就是你如何将数据传递给另一个意图,但它不是OP的问题的答案 – Denny

0

则可以使用序列化办

公共类新闻实现Serializable {

String title; 
String desc; 
String time,imageUrl; 

}

然后新闻列表活动

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

,并得到它的阅读新闻的onCreate实现Serialazable

创建新闻类的新对象

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

使新闻类,并投入intent as putSerialazable();

只需getIntent()。getSerialazable(“key”)并将数据设置为视图即可。

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

使用谷歌Gson序列化对象。

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); 

在另一方面新闻信息的onCreate()做到这一点

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); 
相关问题