2016-06-10 24 views
2

我希望能夠通過單擊將對象從RecyclerView上顯示的已解析JSON數據發送到新活動。以下是相關的代碼:從RecyclerView發送對象到新活動onclick

我試過一些解決方案,但沒有得到任何結果。我已經收到此錯誤:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at athena.sentineljs.com.athena.RVNewsAdapter$NewsViewHolder.onClick(RVNewsAdapter.java:55)

RVNewsAdapter:

public class RVNewsAdapter extends RecyclerView.Adapter<RVNewsAdapter.NewsViewHolder> { 

    public static final String KEY_LINK = "link"; 

    public static class NewsViewHolder extends RecyclerView.ViewHolder 
      implements View.OnClickListener { 
     private static final String TAG = "Hello"; 
     CardView cv; 
     TextView date; 
     TextView link; 
     TextView title; 
     TextView today; 
     List<News> news; 


     public NewsViewHolder(View itemView) { 
      super(itemView); 
      cv = (CardView) itemView.findViewById(R.id.cv); 
      date = (TextView) itemView.findViewById(R.id.date); 
      link = (TextView) itemView.findViewById(R.id.link); 
      title = (TextView) itemView.findViewById(R.id.heading); 
      today = (TextView) itemView.findViewById(R.id.today); 


      itemView.setOnClickListener(this); 
     } 


     @Override 
     public void onClick(View view) { 
      Context context = view.getContext(); 

      Intent intent; 

      intent = new Intent(context, Details.class); 
      intent.putExtra("LINK", news.toString()); 
      context.startActivity(intent); 


     } 


    } 

    List<News> news; 

    RVNewsAdapter(List<News> news) { 
     this.news = news; 
    } 


    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

    @Override 
    public RVNewsAdapter.NewsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.itemnewsfeed, viewGroup, false); 
     NewsViewHolder nvh = new NewsViewHolder(v); 
     return nvh; 
    } 

    @Override 
    public void onBindViewHolder(NewsViewHolder newsViewHolder, int i) { 
     newsViewHolder.date.setText(news.get(i).date); 
     newsViewHolder.link.setText(news.get(i).link); 
     newsViewHolder.title.setText(news.get(i).title); 
     newsViewHolder.today.setText(news.get(i).today); 
    } 

    @Override 
    public int getItemCount() { 
     if (news != null) { 
      return news.size(); 
     } 
     return 0; 
    } 
} 

詳細活動:

public class Details extends AppCompatActivity { 

    private static final String TAG_LINK = "link"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_details); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     Intent in = getIntent(); 

     // Get JSON values from previous intent 
     String link = in.getStringExtra("link"); 

     // Displaying all values on the screen 
     TextView lblLink = (TextView) findViewById(R.id.link); 

     lblLink.setText(link); 
     Log.d("Details", "Data not shown"); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
} 
+0

爲什麼在onclick中使用循環? –

+0

啊,我認爲它需要在那裏,只是刪除它。對不起,編程和Android還是新手。 –

回答

0

你應該送news object這樣

@Override 
public void onClick(View view) { 
    Context context = view.getContext(); 

    Intent intent = new Intent(context, Details.class); 

    int clickPosition = getAdapterPosition(); // get position of clicked item 

    News newObject = news.get(clickPosition); // get clicked new object from news(news is an ArrayList) 
    intent.putExtra("LINK", newObject); 

    context.startActivity(intent); 
} 

同樣爲通過正確的對象通過對象請參閱this answer

+1

但請注意Note對象需要[Parcelable](https://developer.android.com/reference/android/os/Parcelable.html)或Serializable。 – GPuschka

+0

@GPuschka謝謝。我已經更新到我的回答 –

+0

我試過這個,它似乎不工作。新聞是一個類btw,並有一個對象稱爲「鏈接」,我想發送到一個新的活動onclick。 –