Java 为什么我不能将此JSON对象传递给另一个活动

Java 为什么我不能将此JSON对象传递给另一个活动,java,android,json,Java,Android,Json,我正在使用截取从Json获取新闻条目。在MainActivity中,我成功地获取并解析了json,因此我对此没有问题。 现在,每个新闻项目都包含一个标题和新闻摘录。我想要的是,每次点击新闻摘录时,它都会启动另一个名为“新闻详细信息”的活动, 在启动过程中,单击的新闻摘录的“ID”(一个json对象)将被发送到NewsDetails 在新闻详情中,我将连接“ID”和网站的url;这还将返回一个json数组。然后我将解析json并显示它;希望这不会给我带来问题 我遇到的困难是试图发送“ID”并启动“

我正在使用截取从Json获取新闻条目。在MainActivity中,我成功地获取并解析了json,因此我对此没有问题。 现在,每个新闻项目都包含一个标题和新闻摘录。我想要的是,每次点击新闻摘录时,它都会启动另一个名为“新闻详细信息”的活动, 在启动过程中,单击的新闻摘录的“ID”(一个json对象)将被发送到NewsDetails

在新闻详情中,我将连接“ID”和网站的url;这还将返回一个json数组。然后我将解析json并显示它;希望这不会给我带来问题

我遇到的困难是试图发送“ID”并启动“NewsDetails”

到目前为止,我一直在这样做:

所有主要活动类

  public class MainActivity extends AppCompatActivity{

    private final String TAG = "MainActivity";

    //Creating a list of newss
    private List<NewsItems> mNewsItemsList;

    //Creating Views
    private RecyclerView recyclerView;
    private RecyclerView.Adapter adapter;
    private ProgressDialog mProgressDialog;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "Device rotated and onCreate called");

        //Initializing Views
        recyclerView = (RecyclerView) findViewById(R.id.news_recycler);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);



        //Initializing the newslist
        mNewsItemsList = new ArrayList<>();
        adapter = new NewsAdapter(mNewsItemsList, this);

        recyclerView.setAdapter(adapter);



        //Caling method to get data
         getData();

    }


    //This method will get data from the web api

    private void getData(){


        Log.d(TAG, "getData called");
        //Showing progress dialog
        mProgressDialog = new ProgressDialog(MainActivity.this);
        mProgressDialog.setCancelable(false);
        mProgressDialog.setMessage(this.getResources().getString(R.string.load_news));
        mProgressDialog.show();


        //Creating a json request
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(ConfigNews.GET_URL,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, "onResponse called");
                        //Dismissing the progress dialog
                        if (mProgressDialog != null) {
                            mProgressDialog.hide();
                        }
                        /*progressDialog.dismiss();*/


                        //calling method to parse json array
                        parseData(response);

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        //Creating request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Adding request to the queue
        requestQueue.add(jsonArrayRequest);

    }

    //This method will parse json data
    private void parseData(JSONArray array){
        Log.d(TAG, "Parsing array");

        for(int i = 0; i<array.length(); i++) {
            NewsItems newsItem = new NewsItems();
            JSONObject jsonObject = null;
            try {
                jsonObject = array.getJSONObject(i);
                newsItem.setNews_title(jsonObject.getString(ConfigNews.TAG_NEWS_TITLE));
                newsItem.setNews_excerpt(jsonObject.getString(ConfigNews.TAG_NEWS_EXCERPT));
                newsItem.setNewsId(jsonObject.getInt(ConfigNews.TAG_NEWS_ID));

            } catch (JSONException w) {
                w.printStackTrace();
            }
            mNewsItemsList.add(newsItem);

        }

        adapter.notifyItemRangeChanged(0, adapter.getItemCount());


    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy called");
        if (mProgressDialog != null){
            mProgressDialog.dismiss();
            Log.d(TAG, "mProgress dialog dismissed");

        }
    }

}
public class NewsItems {
      private String news_title;
      private String news_excerpt;
      private String news_id;

      public String getNews_title() {
          return news_title;
      }

      public void setNews_title(String news_title) {
          this.news_title = news_title;
      }

      public String getNews_excerpt() {
          return news_excerpt;
      }

      public void setNews_excerpt(String news_excerpt) {
          this.news_excerpt = news_excerpt;
      }

      public String getNews_id() {
          return news_id;
      }

      public void setNews_id(String news_id) {
          this.news_id = news_id;
      }

  }
上面的代码仍然没有问题

所有新闻适配器

   public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private ImageLoader imageLoader;
    private Context mContext;

    //List of newss
    private List<NewsItems> mNewsItems;

    private final int VIEW_ITEM = 0;
    private final int VIEW_PROG = 1;

    private int lastPosition = -1;

   public NewsAdapter(List<NewsItems> newsItems, Context context) {
       super();

       //Getting all newss
       this.mNewsItems = newsItems;
       this.mContext = context;
   }

    @Override
    public int getItemViewType(int position) {
        if (isPositionItem(position))
            return VIEW_ITEM;
        return VIEW_PROG;
    }

    private boolean isPositionItem(int position) {
       return position != getItemCount()-1;
    }



    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder (ViewGroup parent, int viewType) {
        if (viewType == VIEW_ITEM) {
            View v =  LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.news_summ, parent, false);
            return new TextViewHolder(v);
        } else if (viewType == VIEW_PROG){
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.recyclerfooter, parent, false);
            return new ProgressViewHolder(v);
        }

        return null;
    }



    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


        if (holder instanceof TextViewHolder) {
            NewsItems newsList = mNewsItems.get(position);
            ((TextViewHolder) holder).newsTitle.setText(newsList.getNews_title());
            ((TextViewHolder) holder).newsExcerpt.setText(newsList.getNews_excerpt());
            ((TextViewHolder) holder).newsId.setText(String.valueOf(newsList.getNewsId()));

        } else {
            ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
            ((ProgressViewHolder) holder).loadButton.setText(R.string.reload);
        }


    }


    @Override
    public int getItemCount(){
        //Return the number of items in the data set
        return mNewsItems.size();
    }




    public static class TextViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView newsTitle,newsExcerpt, newsId;
        public ImageButton imageButton;
        public NewsItems dNewsItems;

        public TextViewHolder (final View newsView) {
            super(newsView);
            newsTitle = (TextView) newsView.findViewById(R.id.news_title);
            newsExcerpt = (TextView) newsView.findViewById(R.id.news_excerpt);
            newsId = (TextView) newsView.findViewById(R.id.news_id);

            newsExcerpt.setOnClickListener(this);


        }



        @Override
        public void onClick(View v) {


            if (v.getId() == newsExcerpt.getId()) {
               if (v.getId() == newsExcerpt.getId()) {
               Intent i = NewsDetails.newIntent(getActivity(), dNewsItems.getNews_id());
               startActivity(i);
               }
            }
        }
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder implements  View.OnClickListener{
        Button loadButton;
        ProgressBar progressBar;
        public ProgressViewHolder(View footerView){
            super(footerView);
            loadButton = (Button) footerView.findViewById(R.id.reload_button);
            progressBar = (ProgressBar) footerView.findViewById(R.id.progress_load);

            loadButton.setOnClickListener(this);

            if(NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                progressBar.setVisibility(View.VISIBLE);


            } else if (!NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                loadButton.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onClick(View v) {
            if (v.getId() == loadButton.getId()) {
                //
            }
        }
    }


}
public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private ImageLoader imageLoader;
    private Context mContext;

    //List of newss
    private List<NewsItems> mNewsItems;

    private final int VIEW_ITEM = 0;
    private final int VIEW_PROG = 1;

    private int lastPosition = -1;

   public NewsAdapter(List<NewsItems> newsItems, Context context) {
       super();

       //Getting all newss
       this.mNewsItems = newsItems;
       this.mContext = context;
   }

    @Override
    public int getItemViewType(int position) {
        if (isPositionItem(position))
            return VIEW_ITEM;
        return VIEW_PROG;
    }

    private boolean isPositionItem(int position) {
       return position != getItemCount()-1;
    }



    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder (ViewGroup parent, int viewType) {
        if (viewType == VIEW_ITEM) {
            View v =  LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.news_summ, parent, false);
            return new TextViewHolder(v, mContext);
        } else if (viewType == VIEW_PROG){
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.recyclerfooter, parent, false);
            return new ProgressViewHolder(v);
        }

        return null;
    }



    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


        if (holder instanceof TextViewHolder) {
            NewsItems newsList = mNewsItems.get(position);
            ((TextViewHolder) holder).newsTitle.setText(newsList.getNews_title());
            ((TextViewHolder) holder).newsExcerpt.setText(newsList.getNews_excerpt());
            ((TextViewHolder) holder).newsId.setText(String.valueOf(newsList.getNewsId()));

        } else {
            ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
            ((ProgressViewHolder) holder).loadButton.setText(R.string.reload);
        }


    }


    @Override
    public int getItemCount(){
        //Return the number of items in the data set
        return mNewsItems.size();
    }




    public static class TextViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView newsTitle,newsExcerpt, newsId;
        public ImageButton imageButton;
        public NewsItems dNewsItems;
        private Context context;

        public TextViewHolder (final View newsView, final Context context) {
            super(newsView);
            newsTitle = (TextView) newsView.findViewById(R.id.news_title);
            newsExcerpt = (TextView) newsView.findViewById(R.id.news_excerpt);
            newsId = (TextView) newsView.findViewById(R.id.news_id);

            newsExcerpt.setOnClickListener(this);


        }



        @Override
        public void onClick(View v) {


            if (v.getId() == newsExcerpt.getId()) {
               int newsid = 4536;
               Intent myItent = new Intent(context, NewsDetails.class);
               myItent.putExtra("key", newsid);
               context.startActivity(myItent);
               }
            }
        }
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder implements  View.OnClickListener{
        Button loadButton;
        ProgressBar progressBar;
        public ProgressViewHolder(View footerView){
            super(footerView);
            loadButton = (Button) footerView.findViewById(R.id.reload_button);
            progressBar = (ProgressBar) footerView.findViewById(R.id.progress_load);

            loadButton.setOnClickListener(this);

            if(NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                progressBar.setVisibility(View.VISIBLE);


            } else if (!NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                loadButton.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onClick(View v) {
            if (v.getId() == loadButton.getId()) {
                //
            }
        }
    }


}
04-12 20:15:25.424 8772-8772/com.newsus.app E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: com.newsus.app, PID: 8772
                                                                   java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
                                                                       at android.content.ComponentName.<init>(ComponentName.java:77)
                                                                       at android.content.Intent.<init>(Intent.java:4336)
                                                                       at com.newsus.app.NewsAdapter$TextViewHolder.onClick(NewsAdapter.java:181)
                                                                       at android.view.View.performClick(View.java:5076)
                                                                       at android.view.View$PerformClick.run(View.java:20279)
                                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                       at android.os.Looper.loop(Looper.java:135)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5910)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at java.lang.reflect.Method.invoke(Method.java:372)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
当我悬停时,它显示“无法解析方法‘newIntent(?,java.lang.String)’”。 然后我将鼠标悬停在
getActivity()
上,它显示“无法解析方法'getActivity()'”。 对于
startActivity(i)它是“无法解析方法'startActivity(android.content.Intent)'”

所以现在,我的问题是我做错了什么,我应该如何纠正它

实施Rohit Arya回答后的新闻适配器

   public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private ImageLoader imageLoader;
    private Context mContext;

    //List of newss
    private List<NewsItems> mNewsItems;

    private final int VIEW_ITEM = 0;
    private final int VIEW_PROG = 1;

    private int lastPosition = -1;

   public NewsAdapter(List<NewsItems> newsItems, Context context) {
       super();

       //Getting all newss
       this.mNewsItems = newsItems;
       this.mContext = context;
   }

    @Override
    public int getItemViewType(int position) {
        if (isPositionItem(position))
            return VIEW_ITEM;
        return VIEW_PROG;
    }

    private boolean isPositionItem(int position) {
       return position != getItemCount()-1;
    }



    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder (ViewGroup parent, int viewType) {
        if (viewType == VIEW_ITEM) {
            View v =  LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.news_summ, parent, false);
            return new TextViewHolder(v);
        } else if (viewType == VIEW_PROG){
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.recyclerfooter, parent, false);
            return new ProgressViewHolder(v);
        }

        return null;
    }



    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


        if (holder instanceof TextViewHolder) {
            NewsItems newsList = mNewsItems.get(position);
            ((TextViewHolder) holder).newsTitle.setText(newsList.getNews_title());
            ((TextViewHolder) holder).newsExcerpt.setText(newsList.getNews_excerpt());
            ((TextViewHolder) holder).newsId.setText(String.valueOf(newsList.getNewsId()));

        } else {
            ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
            ((ProgressViewHolder) holder).loadButton.setText(R.string.reload);
        }


    }


    @Override
    public int getItemCount(){
        //Return the number of items in the data set
        return mNewsItems.size();
    }




    public static class TextViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView newsTitle,newsExcerpt, newsId;
        public ImageButton imageButton;
        public NewsItems dNewsItems;

        public TextViewHolder (final View newsView) {
            super(newsView);
            newsTitle = (TextView) newsView.findViewById(R.id.news_title);
            newsExcerpt = (TextView) newsView.findViewById(R.id.news_excerpt);
            newsId = (TextView) newsView.findViewById(R.id.news_id);

            newsExcerpt.setOnClickListener(this);


        }



        @Override
        public void onClick(View v) {


            if (v.getId() == newsExcerpt.getId()) {
               if (v.getId() == newsExcerpt.getId()) {
               Intent i = NewsDetails.newIntent(getActivity(), dNewsItems.getNews_id());
               startActivity(i);
               }
            }
        }
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder implements  View.OnClickListener{
        Button loadButton;
        ProgressBar progressBar;
        public ProgressViewHolder(View footerView){
            super(footerView);
            loadButton = (Button) footerView.findViewById(R.id.reload_button);
            progressBar = (ProgressBar) footerView.findViewById(R.id.progress_load);

            loadButton.setOnClickListener(this);

            if(NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                progressBar.setVisibility(View.VISIBLE);


            } else if (!NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                loadButton.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onClick(View v) {
            if (v.getId() == loadButton.getId()) {
                //
            }
        }
    }


}
public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private ImageLoader imageLoader;
    private Context mContext;

    //List of newss
    private List<NewsItems> mNewsItems;

    private final int VIEW_ITEM = 0;
    private final int VIEW_PROG = 1;

    private int lastPosition = -1;

   public NewsAdapter(List<NewsItems> newsItems, Context context) {
       super();

       //Getting all newss
       this.mNewsItems = newsItems;
       this.mContext = context;
   }

    @Override
    public int getItemViewType(int position) {
        if (isPositionItem(position))
            return VIEW_ITEM;
        return VIEW_PROG;
    }

    private boolean isPositionItem(int position) {
       return position != getItemCount()-1;
    }



    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder (ViewGroup parent, int viewType) {
        if (viewType == VIEW_ITEM) {
            View v =  LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.news_summ, parent, false);
            return new TextViewHolder(v, mContext);
        } else if (viewType == VIEW_PROG){
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.recyclerfooter, parent, false);
            return new ProgressViewHolder(v);
        }

        return null;
    }



    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


        if (holder instanceof TextViewHolder) {
            NewsItems newsList = mNewsItems.get(position);
            ((TextViewHolder) holder).newsTitle.setText(newsList.getNews_title());
            ((TextViewHolder) holder).newsExcerpt.setText(newsList.getNews_excerpt());
            ((TextViewHolder) holder).newsId.setText(String.valueOf(newsList.getNewsId()));

        } else {
            ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
            ((ProgressViewHolder) holder).loadButton.setText(R.string.reload);
        }


    }


    @Override
    public int getItemCount(){
        //Return the number of items in the data set
        return mNewsItems.size();
    }




    public static class TextViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView newsTitle,newsExcerpt, newsId;
        public ImageButton imageButton;
        public NewsItems dNewsItems;
        private Context context;

        public TextViewHolder (final View newsView, final Context context) {
            super(newsView);
            newsTitle = (TextView) newsView.findViewById(R.id.news_title);
            newsExcerpt = (TextView) newsView.findViewById(R.id.news_excerpt);
            newsId = (TextView) newsView.findViewById(R.id.news_id);

            newsExcerpt.setOnClickListener(this);


        }



        @Override
        public void onClick(View v) {


            if (v.getId() == newsExcerpt.getId()) {
               int newsid = 4536;
               Intent myItent = new Intent(context, NewsDetails.class);
               myItent.putExtra("key", newsid);
               context.startActivity(myItent);
               }
            }
        }
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder implements  View.OnClickListener{
        Button loadButton;
        ProgressBar progressBar;
        public ProgressViewHolder(View footerView){
            super(footerView);
            loadButton = (Button) footerView.findViewById(R.id.reload_button);
            progressBar = (ProgressBar) footerView.findViewById(R.id.progress_load);

            loadButton.setOnClickListener(this);

            if(NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                progressBar.setVisibility(View.VISIBLE);


            } else if (!NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                loadButton.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onClick(View v) {
            if (v.getId() == loadButton.getId()) {
                //
            }
        }
    }


}
04-12 20:15:25.424 8772-8772/com.newsus.app E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: com.newsus.app, PID: 8772
                                                                   java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
                                                                       at android.content.ComponentName.<init>(ComponentName.java:77)
                                                                       at android.content.Intent.<init>(Intent.java:4336)
                                                                       at com.newsus.app.NewsAdapter$TextViewHolder.onClick(NewsAdapter.java:181)
                                                                       at android.view.View.performClick(View.java:5076)
                                                                       at android.view.View$PerformClick.run(View.java:20279)
                                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                       at android.os.Looper.loop(Looper.java:135)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5910)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at java.lang.reflect.Method.invoke(Method.java:372)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
公共类NewsAdapter扩展了RecyclerView.Adapter{ 私有图像加载器; 私有上下文; //新闻列表 私人物品清单; 私有最终int视图_项=0; 私有最终int视图_PROG=1; private int lastPosition=-1; 公共新闻适配器(列出新闻项、上下文){ 超级(); //得到所有消息 this.mNewsItems=新闻项; this.mContext=上下文; } @凌驾 public int getItemViewType(int位置){ if(位置项目(位置)) 返回视图_项; 返回视图程序; } 私有布尔值isPositionItem(int位置){ 返回位置!=getItemCount()-1; } @凌驾 public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){ if(视图类型==视图项){ 视图v=LayoutInflater.from(parent.getContext()) .充气(R.layout.news_sum,parent,false); 返回新的TextViewHolder(v,mContext); }else if(viewType==VIEW\U PROG){ 视图v=LayoutInflater.from(parent.getContext()) .充气(R.layout.recyclerfooter、parent、false); 返回新的ProgressViewHolder(v); } 返回null; } @凌驾 BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){ if(文本视图保持架的保持架实例){ NewsItems newsList=mNewsItems.get(位置); ((TextViewHolder)holder.newsttitle.setText(newsList.getNews_title()); ((TextViewHolder)holder.newsExtrapt.setText(newsList.getNews_extract()); (TextViewHolder)holder.newsId.setText(String.valueOf(newsList.getNewsId()); }否则{ ((ProgressViewHolder)holder).progressBar.SetUndeterminate(true); ((ProgressViewHolder)holder.loadButton.setText(R.string.reload); } } @凌驾 public int getItemCount(){ //返回数据集中的项目数 返回mNewsItems.size(); } 公共静态类TextViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{ 公共文本查看新闻标题、新闻摘录、新闻ID; 公共图像按钮图像按钮; 公共新闻项目; 私人语境; 公共文本视图持有者(最终视图新闻视图,最终上下文){ 超级(新闻视图); newsTitle=(TextView)newsView.findViewById(R.id.news\u title); NewsExcept=(TextView)newsView.findViewById(R.id.news_摘录); newsId=(TextView)newView.findViewById(R.id.news\u id); newsextract.setOnClickListener(this); } @凌驾 公共void onClick(视图v){ if(v.getId()==newsextract.getId()){ int newsid=4536; Intent myItent=newintent(上下文,NewsDetails.class); myItent.putExtra(“key”,newsid); 背景。起始触觉(myItent); } } } } 公共静态类ProgressViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{ 按钮加载按钮; ProgressBar ProgressBar; 公共ProgressViewHolder(视图页脚视图){ 超级(页脚视图); loadButton=(按钮)footerView.findViewById(R.id.reload_按钮); progressBar=(progressBar)footerView.findViewById(R.id.progress\u load); loadButton.setOnClickListener(此); if(NetworkCheck.isAvailableAndConnected(footerView.getContext())){ progressBar.setVisibility(View.VISIBLE); }如果(!NetworkCheck.isAvailableAndConnected(footerView.getContext()),则为else{ loadButton.setVisibility(View.VISIBLE); } } @凌驾 公共void onClick(视图v){ 如果(v.getId()==loadButton.getId()){ // } } } }
Stacktrace执行Rohit Arya的回答

   public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private ImageLoader imageLoader;
    private Context mContext;

    //List of newss
    private List<NewsItems> mNewsItems;

    private final int VIEW_ITEM = 0;
    private final int VIEW_PROG = 1;

    private int lastPosition = -1;

   public NewsAdapter(List<NewsItems> newsItems, Context context) {
       super();

       //Getting all newss
       this.mNewsItems = newsItems;
       this.mContext = context;
   }

    @Override
    public int getItemViewType(int position) {
        if (isPositionItem(position))
            return VIEW_ITEM;
        return VIEW_PROG;
    }

    private boolean isPositionItem(int position) {
       return position != getItemCount()-1;
    }



    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder (ViewGroup parent, int viewType) {
        if (viewType == VIEW_ITEM) {
            View v =  LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.news_summ, parent, false);
            return new TextViewHolder(v);
        } else if (viewType == VIEW_PROG){
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.recyclerfooter, parent, false);
            return new ProgressViewHolder(v);
        }

        return null;
    }



    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


        if (holder instanceof TextViewHolder) {
            NewsItems newsList = mNewsItems.get(position);
            ((TextViewHolder) holder).newsTitle.setText(newsList.getNews_title());
            ((TextViewHolder) holder).newsExcerpt.setText(newsList.getNews_excerpt());
            ((TextViewHolder) holder).newsId.setText(String.valueOf(newsList.getNewsId()));

        } else {
            ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
            ((ProgressViewHolder) holder).loadButton.setText(R.string.reload);
        }


    }


    @Override
    public int getItemCount(){
        //Return the number of items in the data set
        return mNewsItems.size();
    }




    public static class TextViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView newsTitle,newsExcerpt, newsId;
        public ImageButton imageButton;
        public NewsItems dNewsItems;

        public TextViewHolder (final View newsView) {
            super(newsView);
            newsTitle = (TextView) newsView.findViewById(R.id.news_title);
            newsExcerpt = (TextView) newsView.findViewById(R.id.news_excerpt);
            newsId = (TextView) newsView.findViewById(R.id.news_id);

            newsExcerpt.setOnClickListener(this);


        }



        @Override
        public void onClick(View v) {


            if (v.getId() == newsExcerpt.getId()) {
               if (v.getId() == newsExcerpt.getId()) {
               Intent i = NewsDetails.newIntent(getActivity(), dNewsItems.getNews_id());
               startActivity(i);
               }
            }
        }
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder implements  View.OnClickListener{
        Button loadButton;
        ProgressBar progressBar;
        public ProgressViewHolder(View footerView){
            super(footerView);
            loadButton = (Button) footerView.findViewById(R.id.reload_button);
            progressBar = (ProgressBar) footerView.findViewById(R.id.progress_load);

            loadButton.setOnClickListener(this);

            if(NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                progressBar.setVisibility(View.VISIBLE);


            } else if (!NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                loadButton.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onClick(View v) {
            if (v.getId() == loadButton.getId()) {
                //
            }
        }
    }


}
public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private ImageLoader imageLoader;
    private Context mContext;

    //List of newss
    private List<NewsItems> mNewsItems;

    private final int VIEW_ITEM = 0;
    private final int VIEW_PROG = 1;

    private int lastPosition = -1;

   public NewsAdapter(List<NewsItems> newsItems, Context context) {
       super();

       //Getting all newss
       this.mNewsItems = newsItems;
       this.mContext = context;
   }

    @Override
    public int getItemViewType(int position) {
        if (isPositionItem(position))
            return VIEW_ITEM;
        return VIEW_PROG;
    }

    private boolean isPositionItem(int position) {
       return position != getItemCount()-1;
    }



    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder (ViewGroup parent, int viewType) {
        if (viewType == VIEW_ITEM) {
            View v =  LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.news_summ, parent, false);
            return new TextViewHolder(v, mContext);
        } else if (viewType == VIEW_PROG){
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.recyclerfooter, parent, false);
            return new ProgressViewHolder(v);
        }

        return null;
    }



    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


        if (holder instanceof TextViewHolder) {
            NewsItems newsList = mNewsItems.get(position);
            ((TextViewHolder) holder).newsTitle.setText(newsList.getNews_title());
            ((TextViewHolder) holder).newsExcerpt.setText(newsList.getNews_excerpt());
            ((TextViewHolder) holder).newsId.setText(String.valueOf(newsList.getNewsId()));

        } else {
            ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
            ((ProgressViewHolder) holder).loadButton.setText(R.string.reload);
        }


    }


    @Override
    public int getItemCount(){
        //Return the number of items in the data set
        return mNewsItems.size();
    }




    public static class TextViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView newsTitle,newsExcerpt, newsId;
        public ImageButton imageButton;
        public NewsItems dNewsItems;
        private Context context;

        public TextViewHolder (final View newsView, final Context context) {
            super(newsView);
            newsTitle = (TextView) newsView.findViewById(R.id.news_title);
            newsExcerpt = (TextView) newsView.findViewById(R.id.news_excerpt);
            newsId = (TextView) newsView.findViewById(R.id.news_id);

            newsExcerpt.setOnClickListener(this);


        }



        @Override
        public void onClick(View v) {


            if (v.getId() == newsExcerpt.getId()) {
               int newsid = 4536;
               Intent myItent = new Intent(context, NewsDetails.class);
               myItent.putExtra("key", newsid);
               context.startActivity(myItent);
               }
            }
        }
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder implements  View.OnClickListener{
        Button loadButton;
        ProgressBar progressBar;
        public ProgressViewHolder(View footerView){
            super(footerView);
            loadButton = (Button) footerView.findViewById(R.id.reload_button);
            progressBar = (ProgressBar) footerView.findViewById(R.id.progress_load);

            loadButton.setOnClickListener(this);

            if(NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                progressBar.setVisibility(View.VISIBLE);


            } else if (!NetworkCheck.isAvailableAndConnected(footerView.getContext())) {
                loadButton.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onClick(View v) {
            if (v.getId() == loadButton.getId()) {
                //
            }
        }
    }


}
04-12 20:15:25.424 8772-8772/com.newsus.app E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: com.newsus.app, PID: 8772
                                                                   java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
                                                                       at android.content.ComponentName.<init>(ComponentName.java:77)
                                                                       at android.content.Intent.<init>(Intent.java:4336)
                                                                       at com.newsus.app.NewsAdapter$TextViewHolder.onClick(NewsAdapter.java:181)
                                                                       at android.view.View.performClick(View.java:5076)
                                                                       at android.view.View$PerformClick.run(View.java:20279)
                                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                       at android.os.Looper.loop(Looper.java:135)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5910)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at java.lang.reflect.Method.invoke(Method.java:372)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
04-12 20:15:25.424 8772-8772/com.newsus.app E/AndroidRuntime:FATAL EXCEPTION:main
进程:com.newsus.app,PID:8772
java.lang.NullPointerException:尝试在空对象上调用虚拟方法“java.lang.String android.content.Context.getPackageName()”