2016-05-22 5 views
1

Ich habe eine Listenansicht, die swipelistadapter und App-Controller implementieren. Die Listenansicht wird korrekt aus der Datenbank angezeigt. Das einzige, was ich brauche, ist die Position jedes Elements zu erhalten und jedem eine Absichtsaktivität zuzuweisen. Das sind meine CodesOnItemClicklistener auf Listenadapter, der seine Elemente aus der Datenbank auffüllt

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; 
    } 

} 

unter Klasse ist die Haupttätigkeit

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; 
    } 

} 

Jede Hilfe wird geschätzt. Vielen Dank.

+0

Welche Informationen werden Sie auf die Absicht zu passieren versucht? –

+0

Ich empfehle das Viewholder-Muster für eine lange Liste von Filmen verwenden, wird es die Leistung steigern – PrisonMike

+0

Vielen Dank für Ihre Antwort. Können Sie zeigen, wie die zweite Aktivität putExtra erhalten soll, nachdem Sie auf eines der Elemente geklickt haben. App stürzt ab, nachdem du auf einen Gegenstand geklickt hast. – Webln

Antwort

0

-Code für ein einzelnes Element erhalten:

String singleItem = getItem(position); 
+0

Danke für Ihre Antwort. Können Sie zeigen, wie die zweite Aktivität putExtra erhalten soll, nachdem Sie auf eines der Elemente geklickt haben. App stürzt ab, nachdem du auf einen Gegenstand geklickt hast. - – Webln

0

das ist ganz einfach. hier ist eine Änderung an Ihrem 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); 
     } 
    }); 

nur beachten Sie, dass movieList Objekt das gleiche Objekt, das Sie Ihren Adapter passieren sollte

+0

Danke für Ihre Antwort. Können Sie zeigen, wie die zweite Aktivität putExtra erhalten soll, nachdem Sie auf eines der Elemente geklickt haben. App stürzt ab, nachdem du auf einen Gegenstand geklickt hast. – Webln

+0

Kannst du einen Ausdruck darüber geben, wie der onclicklistener mit der nächsten Aktivität funktioniert, weil App nach dem Klicken auf einen Gegenstand abstürzt. – Webln

+0

@Webln posten Sie bitte den Stacktrace, um zu sehen, was schief geht – Pooya