列表适配器上的OnItemClicklistener,用于从数据库填充其项目

时间:2016-05-22 23:22:04

标签: java android

我有一个列表视图,可以实现swipelistadapter和app controller。列表视图从数据库中正确显示,我唯一需要的是获取每个项目的位置并为每个项目分配意图活动。这些是我的代码

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

}

Class下面是主要活动

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

}

任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

获取单个项目的代码:

String singleItem = getItem(position);

答案 1 :(得分: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对象应与传递给适配器的对象相同