0

我已经制作了一个 listview 应用程序,然后我创建了一个带有片段的新应用程序,并希望将 listview 实现到片段。但是当我这样做时,我遇到了一个奇怪的错误。

    public class Fragment1 extends Fragment {
 private ArrayList<FeedItem> feedList = null;
 private ProgressBar progressbar = null;
 private ListView feedListView = null;

  @Override  
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
      View rootView = inflater.inflate(R.layout.list_row_layout, container, false);

      progressbar = (ProgressBar)rootView.findViewById(R.id.progressBar);
      String url = "";
      new DownloadFilesTask().execute(url);
    return rootView;


  } 

  public void updateList() {
      feedListView= (ListView)getActivity().findViewById(R.id.custom_list);
      feedListView.setVisibility(View.VISIBLE);
      progressbar.setVisibility(View.GONE);

      **feedListView.setAdapter(new CustomListAdapter(this, feedList));**
      feedListView.setOnItemClickListener(new OnItemClickListener() {

              @Override
              public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                      Object o = feedListView.getItemAtPosition(position);
                      FeedItem newsData = (FeedItem) o;



                      **Intent intent = new Intent(FeedListActivity.this, FeedDetailsActivity.class);**
                      intent.putExtra("feed", newsData);
                      startActivity(intent);
              }
         });
           }

             public class DownloadFilesTask extends AsyncTask<String, Integer, Void> {

      @Override
      protected void onProgressUpdate(Integer... values) {
      }

      @Override
      protected void onPostExecute(Void result) {
              if (null != feedList) {
                      updateList();
              }
      }

      @Override
      protected Void doInBackground(String... params) {
              String url = params[0];

              // getting JSON string from URL
              JSONObject json = getJSONFromUrl(url);

              //parsing json data
              parseJson(json);
              return null;
          }
          }


           public JSONObject getJSONFromUrl(String url) {
          InputStream is = null;
        JSONObject jObj = null;
           String json = null;

       // Making HTTP request
       try {
              // defaultHttpClient
              DefaultHttpClient httpClient = new DefaultHttpClient();
              HttpPost httpPost = new HttpPost(url);

              HttpResponse httpResponse = httpClient.execute(httpPost);
              HttpEntity httpEntity = httpResponse.getEntity();
              is = httpEntity.getContent();

              BufferedReader reader = new BufferedReader(new InputStreamReader(
                              is, "iso-8859-1"), 8);
              StringBuilder sb = new StringBuilder();
              String line = null;
              while ((line = reader.readLine()) != null) {
                      sb.append(line + "\n");
              }
              is.close();
              json = sb.toString();
      } catch (UnsupportedEncodingException e) {
              e.printStackTrace();
      } catch (ClientProtocolException e) {
              e.printStackTrace();
      } catch (IOException e) {
              e.printStackTrace();
      }

         try {
              jObj = new JSONObject(json);
           } catch (JSONException e) {
              Log.e("JSON Parser", "Error parsing data " + e.toString());
         }

             // return JSON String
           return jObj;

         }

             public void parseJson(JSONObject json) {
                 try {

              // parsing json object
              if (json.getString("status").equalsIgnoreCase("ok")) {
                      JSONArray posts = json.getJSONArray("posts");

                      feedList = new ArrayList<FeedItem>();

                      for (int i = 0; i < posts.length(); i++) {
                              JSONObject post = (JSONObject) posts.getJSONObject(i);
                              FeedItem item = new FeedItem();
                              item.setTitle(post.getString("title"));
                              item.setDate(post.getString("description"));
                              item.setId(post.getString("id"));
                              item.setUrl(post.getString("url"));
                              item.setContent(post.getString("description"));
                              JSONArray attachments = post.getJSONArray("attachments");

                              if (null != attachments && attachments.length() > 0) {
                                      JSONObject attachment = attachments.getJSONObject(0);
                                      if (attachment != null)
                                              item.setAttachmentUrl(attachment.getString("url"));
                              }

                              feedList.add(item);
                      }
              }
      } catch (JSONException e) {
              e.printStackTrace();
      }
     }

     }

问题出在这条线上

          feedListView.setAdapter(new CustomListAdapter(this, feedList));
            Intent intent = new Intent(FeedListActivity.this, FeedDetailsActivity.class);

此行有多个标记 - 行断点:Fragment1 [行:57] - updateList()

- The constructor CustomListAdapter(Fragment1, ArrayList<FeedItem>) is 
 undefined
      No enclosing instance of the type FeedListActivity is accessible in scope

自定义列表适配器:

          public class CustomListAdapter extends BaseAdapter {

        private ArrayList<FeedItem> listData;

       private LayoutInflater layoutInflater;

        private Context mContext;

       public CustomListAdapter(Context context, ArrayList<FeedItem> listData) {
            this.listData = listData;
            layoutInflater = LayoutInflater.from(context);
            mContext = context;
             }

         @Override
         public int getCount() {
            return listData.size();
           }

                  @Override
             public Object getItem(int position) {
            return listData.get(position);
           }

              @Override
              public long getItemId(int position) {
            return position;
          }

            public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                    convertView = layoutInflater.inflate(R.layout.list_row_layout, null);
                    holder = new ViewHolder();
                    holder.headlineView = (TextView) convertView.findViewById(R.id.title);
                    holder.reportedDateView = (TextView) convertView.findViewById(R.id.date);
                    holder.imageView = (ImageView) convertView.findViewById(R.id.thumbImage);
                    convertView.setTag(holder);
            } else {
                    holder = (ViewHolder) convertView.getTag();
            }

            FeedItem newsItem = (FeedItem) listData.get(position);
            holder.headlineView.setText(newsItem.getTitle());
            holder.reportedDateView.setText(newsItem.getDate());

            if (holder.imageView != null) {
                    new ImageDownloaderTask(holder.imageView).execute(newsItem.getAttachmentUrl());
            }

            return convertView;
      }

       static class ViewHolder {
            TextView headlineView;
            TextView reportedDateView;
            ImageView imageView;
          }
             } 
4

1 回答 1

0

在这一行中feedListView.setAdapter(new CustomListAdapter(this, feedList));,只需将其替换为getActivity();

于 2013-10-31T16:36:12.007 回答