2015-02-06 105 views
0

林繼上recyclerview教程這裏找到http://javatechig.com/android/android-recyclerview-exampleRecyclerView活動到碎片

我已經修改了它適合我的需要,除了一兩件事,在這個在MainActivity,我需要在一個片段,沒有活動。這裏是我的片段,因爲它位於現在:

public class FeedZooperListFragment extends Fragment { 
    private static final String TAG = "RecyclerViewExample"; 
    private List<FeedZ> feedItemList = new ArrayList<FeedZ>(); 
//added static might remove 
    private static RecyclerView mRecyclerView; 
    private static MyRecyclerAdapter adapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     /* Allow activity to show indeterminate progress-bar */ 
     getActivity().requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 

     setContentView(R.layout.fragment_recyclerview); 

     /* Initialize recycler view */ 
     mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
     mRecyclerView.setLayoutManager(new GridLayoutManager(this,2)); 

     /*Downloading data from below url*/ 
     final String url = "http://www.thisismyurl.com"; 
     new AsyncHttpTask().execute(url); 
    } 

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

    /* @Override 
     protected void onPreExecute() { 
      setProgressBarIndeterminateVisibility(true); 
     }*/ 

     @Override 
     protected Integer doInBackground(String... params) { 
      InputStream inputStream = null; 
      Integer result = 0; 
      HttpURLConnection urlConnection = null; 

      try { 
       /* forming th java.net.URL object */ 
       URL url = new URL(params[0]); 
       urlConnection = (HttpURLConnection) url.openConnection(); 

       /* for Get request */ 
       urlConnection.setRequestMethod("GET"); 
       int statusCode = urlConnection.getResponseCode(); 

       /* 200 represents HTTP OK */ 
       if (statusCode == 200) { 
        BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
        StringBuilder response = new StringBuilder(); 
        String line; 
        while ((line = r.readLine()) != null) { 
         response.append(line); 
        } 

        parseResult(response.toString()); 
        result = 1; // Successful 
       }else{ 
        result = 0; //"Failed to fetch data!"; 
       } 

      } catch (Exception e) { 
       Log.d(TAG, e.getLocalizedMessage()); 
      } 
      return result; //"Failed to fetch data!"; 
     } 

     @Override 
     protected void onPostExecute(Integer result) { 
      // setProgressBarIndeterminateVisibility(false); 
      /* Download complete. Lets update UI */ 
      if (result == 1) { 
       adapter = new MyRecyclerAdapter(FeedZListFragment.this, feedItemList); 
       mRecyclerView.setAdapter(adapter); 
      } else { 
       Log.e(TAG, "Failed to fetch data!"); 
      } 
     } 
    } 

    private void parseResult(String result) { 
     try { 
      JSONObject response = new JSONObject(result); 
      JSONArray products = response.optJSONArray("products"); 

      /*Initialize array if null*/ 
      if (null == feedItemList) { 
       feedItemList = new ArrayList<FeedZ>(); 
      } 

      for (int i = 0; i < products.length(); i++) { 
       JSONObject product = products.optJSONObject(i); 

       FeedZ item = new FeedZ(); 
       item.setTitle(product.optString("title")); 
       item.setImage_url(product.optString("image_url")); 
       item.setPackage_url(product.optString("package_url")); 
       item.setIds(product.optString("ids")); 
       feedItemList.add(item); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我的問題都與無法解析setContentView(R.layout.fragment_recyclerview)

方法的setContentView(INT),以及解決不了的方法findviewByID爲

mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
mRecyclerView.setLayoutManager(new GridLayoutManager(this,2)); 

任何幫助非常感謝。

回答

1

setContentView()只在Activity。您需要對onCreateView()方法中的佈局進行膨脹,您將覆蓋該方法。

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
return inflater.inflate(R.layout.fragment_recyclerview, 
     container, false); 
} 

在這裏看到更多的信息上 - super.onCreateView in Fragments

對於findViewById你可以做2件事情之一 -

你可以寫getActivity().findViewById()

onCreateView方法,你可以說:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_recyclerview, 
      container, false) 

     view.findViewById.... 

    return; 
    } 
+0

謝謝。這解決了我作爲一個片段構建這個活動的問題 – nmiltner 2015-02-07 15:22:39