2016-05-22 72 views
1

我有一個實現swipelistadapter和應用程序控制器的列表視圖。列表視圖從數據庫中正確顯示,我唯一需要的是獲取每個項目的位置併爲每個項目分配意向活動。這是我的代碼OnItemClicklistener列表適配器,從數據庫中填充其項目

public class SwipeListAdapter extends BaseAdapter { 
    private Activity activity; 
    private LayoutInflater inflater; 
    private List<Movie> movieList; 
    private String[] bgColors; 


    public SwipeListAdapter(Activity tab1, List<Movie> movieList) { 
     this.activity = tab1; 
     this.movieList = movieList; 
     bgColors = activity.getApplicationContext().getResources().getStringArray(R.array.movie_serial_bg); 
    } 

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

    @Override 
    public Object getItem(int location) { 
     return movieList.get(location); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (inflater == null) 
      inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) 
      convertView = inflater.inflate(R.layout.list_rows, null); 

     TextView serial = (TextView) convertView.findViewById(R.id.serial); 
     TextView title = (TextView) convertView.findViewById(R.id.title); 

     serial.setText(String.valueOf(movieList.get(position).id)); 
     title.setText(movieList.get(position).title); 

     String color = bgColors[position % bgColors.length]; 
     serial.setBackgroundColor(Color.parseColor(color)); 

     return convertView; 
    } 

} 

下面類是主要的活動

public class Tab1 extends Fragment implements ViewSwitcher.ViewFactory, SwipeRefreshLayout.OnRefreshListener { 

    private int index; 
    private int[] images = new int[] { R.drawable.gallery1, R.drawable.gallery2, R.drawable.gallery3, R.drawable.gallery4, R.drawable.gallery5, R.drawable.gallery6, R.drawable.gallery7, R.drawable.gallery8 }; 
    ImageSwitcher switcher; 
    android.os.Handler Handler = new Handler(); 

    private SwipeRefreshLayout swipeRefreshLayout; 
    private SwipeListAdapter adapter; 
    private List<Movie> movieList; 
    private ListView listView; 

    // private static final String url = "http://api.androidhive.info/json/movies.json"; 

    private String URL_TOP_250 = "http://192.158.33.172/locator/test/refractor.php?offset="; 

    // initially offset will be 0, later will be updated while parsing the json 
    private int offSet = 0; 

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

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


     listView = (ListView) v.findViewById(R.id.list); 

     // Adding request to request queue 
//Editted  AppController.getInstance().addToRequestQueue(movieReq); 

     swipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_refresh_layout); 

     movieList = new ArrayList<>(); 
     adapter = new SwipeListAdapter(getActivity(), movieList); 
     listView.setAdapter(adapter); 

     swipeRefreshLayout.setOnRefreshListener(this); 

     swipeRefreshLayout.post(new Runnable() { 
            @Override 
            public void run() { 
             swipeRefreshLayout.setRefreshing(true); 

             fetchMovies(); 
            } 
           } 
     ); 


     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

       //String selectedFromList = (listView.getItemAtPosition(position).getString()); 
       // String text = movieList[position]; 
       Intent i = new Intent(getActivity(), Tab2.class); 
       // i.putExtra("TEXT", text); 
       startActivity(i); 
      } 
     }); 

     return v; 
    } 

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

     switcher = (ImageSwitcher) getActivity().findViewById(R.id.imageSwitcher1); 
     switcher.setFactory(this); 

     switcher.setImageResource(images[index]); 
     switcher.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       index++; 
       if (index >= images.length) { 
        index = 0; 
       } 
       switcher.setImageResource(images[index]); 
      } 
     }); 
     switcher.setInAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); 
     switcher.setOutAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_out)); 

     //auto change image 
     Handler.post(UpdateImage); 

    } 




    @Override 
    public void onRefresh() { 
     fetchMovies(); 
    } 


    private void fetchMovies() { 

     // showing refresh animation before making http call 
     swipeRefreshLayout.setRefreshing(true); 

     // appending offset to url 
     String url = URL_TOP_250 + offSet; 

     // Volley's json array request object 
     JsonArrayRequest req = new JsonArrayRequest(url, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 

         if (response.length() > 0) { 

          // looping through json and adding to movies list 
          for (int i = 0; i < response.length(); i++) { 
           try { 
            JSONObject movieObj = response.getJSONObject(i); 

            int rank = movieObj.getInt("rank"); 
            String title = movieObj.getString("postTitle"); 

            Movie m = new Movie(rank, title); 

            movieList.add(0, m); 

            // updating offset value to highest value 
            if (rank >= offSet) 
             offSet = rank; 

           } catch (JSONException e) { 
            Log.e(TAG, "JSON Parsing error: " + e.getMessage()); 
           } 
          } 

          adapter.notifyDataSetChanged(); 
         } 

         // stopping swipe refresh 
         swipeRefreshLayout.setRefreshing(false); 

        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(TAG, "Server Error: " + error.getMessage()); 

       Toast.makeText(getActivity().getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); 

       // stopping swipe refresh 
       swipeRefreshLayout.setRefreshing(false); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(req); 
    } 


    Runnable UpdateImage = new Runnable() { 
     public void run() { 
      // Increment index 
      index++; 
      if (index > (images.length - 1)) { 
       index = 0; 
      } 
      switcher.setImageResource(images[index]); 
      // Set the execution after 5 seconds 
      Handler.postDelayed(this, (3 * 1000)); 
     } 
    }; 

    @Override 
    public View makeView() { 
     ImageView myView = new ImageView(getActivity()); 
     myView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
     myView.setLayoutParams(new ImageSwitcher.LayoutParams(Gallery.LayoutParams. 
       FILL_PARENT, Gallery.LayoutParams.FILL_PARENT)); 
     return myView; 
    } 

} 

任何幫助將不勝感激。謝謝。

+0

什麼樣的信息是你想傳遞給意圖是什麼? –

+0

我建議使用視圖模式爲一長串電影,它會增加性能 – PrisonMike

+0

感謝您的回覆。您可以在點擊其中一個項目後顯示第二項活動將如何收到putExtra。點擊任何項目後應用程序崩潰。 – Webln

回答

0

代碼得到一個單一的項目:

String singleItem = getItem(position); 
+0

感謝您的回覆。您可以在點擊其中一個項目後顯示第二項活動將如何收到putExtra。點擊任何項目後應用程序崩潰。 - – Webln

0

這是相當直截了當。這裏是一個修改您的onItemClickListener

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

      String text = movieList.get(position); 
      Intent i = new Intent(getActivity(), Tab2.class); 
      i.putExtra("TEXT", text); 
      startActivity(i); 
     } 
    }); 

只需注意movieList對象應該是你傳遞給您的適配器相同的對象

+0

感謝您的回覆。您可以在點擊其中一個項目後顯示第二項活動將如何收到putExtra。點擊任何項目後應用程序崩潰。 – Webln

+0

你可以給出一個關於onclicklistener如何與下一個活動一起工作的表達式,在點擊任何項目後導致應用程序崩潰。 – Webln

+0

@Webln請發佈堆棧跟蹤,看看出現了什麼問題 – Pooya