2015-07-03 32 views
0

如何通過意圖啓動新活動來傳遞項目的位置? 我想開始一個叫做single的新活動,它相應地顯示電影的評分..請幫助 我在過去兩天一直在嘗試這個。通過回收站視圖項目的位置以開闢新的活動性

下面是代碼:

public class NowPlaying extends Fragment { 

    private static final String TAG = NowPlaying.class.getSimpleName(); 

    // Movies json url 
    private static final String url = "http://private-8149-themoviedb.apiary-mock.com/3/movie/now_playing?api_key="; 
    private ProgressDialog pDialog; 
    private List<NowPlayingInfo> bottom = new ArrayList<NowPlayingInfo>() ; 

    NowPlayingAdapter adapter; 
    RecyclerView recyclerView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.activity_main, container, false); 
     ActionBar toolbar = ((AppCompatActivity) getActivity()).getSupportActionBar(); 
     toolbar.setTitle("Now playing"); 

     recyclerView = (RecyclerView) v.findViewById(R.id.cardList); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
     recyclerView.setLayoutManager(linearLayoutManager); 

     adapter = new NowPlayingAdapter(getActivity(), bottom); 
     recyclerView.setAdapter(adapter); 

     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setMessage("Loading..."); 
     pDialog.show(); 

     adapter.SetOnItemClickListener(new NowPlayingAdapter.OnItemClickListener() { 

      @Override 
      public void onItemClick(View v, int position) { 

        // do something with position 
        Intent i = new Intent(v.getContext(), Single.class); 

        //pass the position of the item to single class 
        v.getContext().startActivity(i); 
      } 
     }); 

     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         Log.d(TAG, response.toString()); 
         hidePDialog(); 

         try { 

          JSONArray jsonArray = response.getJSONArray("results"); 
          for (int i = 0; i < jsonArray.length(); i++) { 

           JSONObject jsonObject = jsonArray.getJSONObject(i); 
           NowPlayingInfo trailer = new NowPlayingInfo(); 
           trailer.setTitle(jsonObject.getString("original_title")); 

           String iss = "http://image.tmdb.org/t/p/w500" + jsonObject.getString("poster_path") ; 
           trailer.setImage(iss); 
           bottom.add(trailer); 
           adapter.notifyDataSetChanged(); 

          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
         adapter.notifyDataSetChanged(); 
        } 

       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       hidePDialog(); 
      } 
     }); 
     AppController.getInstance().addToRequestQueue(jsonObjectRequest); 
     return v; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     hidePDialog(); 
    } 

    private void hidePDialog() { 
     if (pDialog != null) { 
      pDialog.dismiss(); 
      pDialog = null; 
     } 
    } 
} 
+0

那麼是什麼問題呢?使用'i.putExtra'傳遞'位置' –

+0

請看看我的答案。 –

+0

我會阻止你傳遞職位(如果你想用它來索引你的數據集)。 'RecyclerView'中的位置不代表數據集中的位置。選擇另一種識別數據的方式(例如,通過鍵)。你可以在這裏找到一個例子http://stackoverflow.com/questions/26695229/how-is-the-position-of-a-recyclerview-adapter-related-to-the-index-of-its-datase – kha

回答

1
 adapter.SetOnItemClickListener(new NowPlayingAdapter.OnItemClickListener() { 

      @Override 
      public void onItemClick(View v, int position) { 

        NowPlayingInfo _nowPlaying = bottom.get(position); 
        // do something with position 
        Intent i = new Intent(v.getContext(), Single.class); 

        //pass the position of the item to single class 
        i.putExtra("ISS", _nowPlaying.getImage()); //you can put your current playing info. 
        i.putExtra("POSITION", position); //you can put your position to next activity. 
        v.getContext().startActivity(i); 

      } 
     }); 

在SingleInfo添加此類。

      String _rating = ""; 

          public String get_rating() { 
           return _rating; 
          } 

          public void set_rating(String _rating) { 
           this._rating = _rating; 
          } 

在單類添加此 -

int _currentPos = 0 ; //Global variable . 


_currentPos = getIntent().getIntExtra("position", 0);// paste this in onCreate() 

編在一個班裏的onResponse添加該代碼 -

try { 

          JSONArray jsonArray = response.getJSONArray("results"); 
          for (int i = 0; i < jsonArray.length(); i++) { 

           JSONObject jsonObject =  jsonArray.getJSONObject(i); 
           SingleInfo s = new SingleInfo(); 
           s.set_rating(jsonObject.getString("rating")); 

           single.add(s); 


          } 



          //changed by Shoeb 
          SingleInfo _singleInfo =   single.get(_currentPos); //position from previous activity 
          textView.setText(_singleInfo.get_rating()); 
          //end changes 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
+0

嘿,你可以回答這個http://stackoverflow.com/questions/31605057/cannot-resolve-symbol-ipackagedeleteobserver? –

0

額外加給你的意圖

i.putExtra("position",position); 

而對其他活動:

getIntent().getIntExtra("position", 0); 
相關問題