Android Custom ArrayAdapter 不接受数组

标签 android listview android-arrayadapter

我正确地填充了一个数组?无法将 NewsData_data 解析为变量。

    NewsData NewsData_data[] = new NewsData[]
                {
                    new NewsData(header[i], short_text[i], team[i], datatime[i], photo_url[i])
                };

问题在:

     NewsDataAdapter adapter = new NewsDataAdapter(this, 
                        R.layout.news_details, NewsData_data);

NewsData_data 无法解析为变量。如何修复此错误?

    public void ListDrwaer() { 
            String[] header;
            String[] short_text;
            String[] team;
            String[] datatime;
            String[] photo_url;
      try {
       JSONObject jsonResponse = new JSONObject(jsonResult);
       JSONArray jsonMainNode = jsonResponse.optJSONArray("news");
       for (int i = 0; i < jsonMainNode.length(); i++) {
        JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
        header[i] = jsonChildNode.optString("header");
        short_text[i] = jsonChildNode.optString("short_text");
        team[i] = jsonChildNode.optString("team");
        datatime[i] = jsonChildNode.optString("datatime");
        photo_url[i] = jsonChildNode.optString("photo_url");    

        NewsData NewsData_data[] = new NewsData[]
                {
                    new NewsData(header[i], short_text[i], team[i], datatime[i], photo_url[i])
                };      
       }
      } catch (JSONException e) {
       Toast.makeText(getActivity(), "Error" + e.toString(),
         Toast.LENGTH_SHORT).show();
      }

NewsDataAdapter adapter = new NewsDataAdapter(this, 
                        R.layout.news_details, NewsData_data);
      View header1 = getActivity().getLayoutInflater().inflate(R.layout.news_details, null);
                listView.addHeaderView(header1);                    
                listView.setAdapter(adapter);
     }

     public class NewsData {
            public String header;
            public String short_text;
            public String team;
            public String datatime;
            public String photo_url;
            public NewsData(){
                super();
            }

            public NewsData(String header,
                        String short_text,
                        String team,
                        String datatime,
                        String photo_url) {
                super();
                this.header = header;
                this.short_text = short_text;
                this.team = team;
                this.datatime = datatime;
                this.photo_url = photo_url;
            }
        }

     public class NewsDataAdapter extends ArrayAdapter<NewsData>{

            Context context; 
            int layoutResourceId;    
            NewsData data[] = null;

            public NewsDataAdapter(Context context, int layoutResourceId, NewsData[] data) {
                super(context, layoutResourceId, data);
                this.layoutResourceId = layoutResourceId;
                this.context = context;
                this.data = data;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View row = convertView;
                NewsDataHolder holder = null;

                if(row == null)
                {
                    LayoutInflater inflater = ((Activity)context).getLayoutInflater();
                    row = inflater.inflate(layoutResourceId, parent, false);

                    holder = new NewsDataHolder();
                    holder.img_news = (ImageView)row.findViewById(R.id.img_news);
                    holder.header = (TextView)row.findViewById(R.id.header);
                    holder.short_text = (TextView)row.findViewById(R.id.short_text);
                    holder.team = (TextView)row.findViewById(R.id.team);
                    holder.datatime = (TextView)row.findViewById(R.id.datatime);

                    row.setTag(holder);
                }
                else
                {
                    holder = (NewsDataHolder)row.getTag();
                }       
                NewsData NewsData = data[position];                 
                Picasso.with(context).load(NewsData.photo_url).into(holder.img_news);
                holder.header.setText(NewsData.header);
                holder.short_text.setText(NewsData.short_text);
                holder.team.setText(NewsData.team);
                holder.datatime.setText(NewsData.datatime);                 
                return row;
            }

             class NewsDataHolder
            {
                ImageView img_news;
                TextView header;
                TextView short_text;
                TextView team;
                TextView datatime;
            }
        }

问题在:

     NewsDataAdapter adapter = new NewsDataAdapter(this, 
                        R.layout.news_details, NewsData_data);

NewsData_data 无法解析为变量

最佳答案

您需要在 try block 之外声明您的数组,以便它对 ArrayAdapter 构造函数可见。

关于Android Custom ArrayAdapter 不接受数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20894978/

相关文章:

android - onClickItem ListView 自定义 ArrayAdapter Android Studio

java - Android volley图片缓存问题

java - 将文件中包含的字节值读入字节数组

android - OnClick 抑制下面的 OnTouch

安卓:Listview NullPointerException

java - 使用 arrayAdapter 显示从多个 Firebase 数据库引用获取的数据

android - 外部数据库和 Android 应用程序

c# - 按日期时间值而不是字符串值对列进行排序?

android - HashMap 中的对象 - 传递给 ListView 适配器

android - 没有上下文的 ArrayAdapter Android