在片段

时间:2017-03-07 06:38:23

标签: android android-fragments

这是导航视图中的Fragment,当我点击导航视图中的项目并返回到此片段时,它会默认打开,列表中的项目加倍,例如在列表中,当我按下时它有苹果它显示了两个苹果

public class AllProductsActivity extends Fragment {
private static final String TAG = MainActivity.class.getSimpleName();
private  String category_id;
 // Movies json url
private  String url ;
private ProgressDialog pDialog;
private List<Movie> movieList=new ArrayList<Movie>() ;
private ListView listView;
private CustomListAdapter adapter;

 public AllProductsActivity() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    Bundle bundle=getArguments();
    category_id = bundle.getString("IDS");
    View rootView = inflater.inflate(R.layout.category_layout, container, false);
    listView = (ListView) rootView.findViewById(R.id.categories_list);

    adapter = new CustomListAdapter(getActivity(), movieList);
    listView.setAdapter(adapter);

    category_id = bundle.getString("IDS");
    VerifyURL();
    return rootView;
}

private void VerifyURL() {

    if (category_id.equals("no_product")) {
        url = "http://192.168.43.149/Newfolder/gap.php";
        DownloadJSON();
    }else{
        url = "http://192.168.43.149/Newfolder/gap.php?category_id=" + category_id;
        DownloadJSON();

    }
}

private void DownloadJSON(){

    pDialog=new
            ProgressDialog(getActivity());
    // Showing progress dialog before making http request
    pDialog.setMessage("Loading...");
    pDialog.show();



    // Creating volley request obj
    JsonArrayRequest movieReq = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    hidePDialog();

                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            Movie movie = new Movie();
                            movie.setTitle(obj.getString("name"));
                            movie.setThumbnailUrl(obj.getString("image"));
                            movie.setRating(obj.getString("price"));
                            movie.setYear(obj.getString("description"));



                            // adding movie to movies array
                            movieList.add(movie);

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

                    }

                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    adapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            hidePDialog();

        }
    });

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

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

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

这是我的Adapter课程,它会打开Activity我要打开Fragment我已经将Fragment经理更改为获取的孩子Fragment经理,但它不起作用

public class CustomListAdapter extends BaseAdapter {

    private Activity activity;
    private LayoutInflater inflater;
    private List<Movie> movieItems;
    HashMap<String, String> m = new HashMap<String, String>();
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public CustomListAdapter(Activity activity, List<Movie> movieItems) {
        this.activity = activity;
        this.movieItems = movieItems;
    }

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

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

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

    @Override
    public View getView(final 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.all_products, null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
        NetworkImageView thumbNail = (NetworkImageView) convertView
                .findViewById(R.id.PI1);
        ImageButton AddcarT=(ImageButton) convertView.findViewById(R.id.product_add_cart);
        TextView title = (TextView) convertView.findViewById(R.id.PN1);
        TextView rating = (TextView) convertView.findViewById(R.id.PD1);
        TextView genre = (TextView) convertView.findViewById(R.id.PD2);

        // getting movie data for the row
        final Movie m = movieItems.get(position);

        // thumbnail image
        thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);

        // title
        title.setText(m.getTitle());

        // rating
        rating.setText("Rating: " + String.valueOf(m.getRating()));

        // genre
        genre.setText(m.getYear());

        // release year
        convertView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Get the position
                Movie m = movieItems.get(position);

                Intent intent = new Intent(activity, ProductsViewActivity.class);
                // Pass all data rank
                intent.putExtra("rank", m.getTitle());
                intent.putExtra("flag", m.getThumbnailUrl());
                activity.startActivity(intent);

            }
        });
        AddcarT.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Get the position
                Movie m = movieItems.get(position);
                Toast.makeText(activity, m.getTitle(), Toast.LENGTH_LONG).show();
                // Pass all data rank

            }
        });

        return convertView;}


}

4 个答案:

答案 0 :(得分:1)

如果您没有多次调用api来使用分页,请在向其中添加数据之前致电movieList.clear()movieList = new ArrayList<>();

所以你的代码将是: -

// Checking of movieList is not null
if(movieList != null) {
    movieList.clear();
} else {
    movieList = new ArrayList<>();
}                   
for (int i = 0; i < response.length(); i++) {
   try {
      JSONObject obj = response.getJSONObject(i);
      Movie movie = new Movie();
      movie.setTitle(obj.getString("name"));
      movie.setThumbnailUrl(obj.getString("image"));
      movie.setRating(obj.getString("price"));
      movie.setYear(obj.getString("description"));

      // adding movie to movies array
      movieList.add(movie);

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

答案 1 :(得分:0)

在onCreateView()方法中,清除列表。

movieList.clear();

答案 2 :(得分:0)

使用它:

 if (adapter==null) {
            prod = new ArrayList<>();
            adapter = new ProductsAdapter(prod, getActivity());

            if (Constants.isNetworkAvailable(getActivity())){

                recyclerView.setLayoutManager(GlayoutManager);
                recyclerView.setAdapter(adapter);

            }else {

                Constants.showToast(getActivity(),"No Internet!!");
                recyclerView.setLayoutManager(GlayoutManager);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }

        }else{

            recyclerView.setLayoutManager(GlayoutManager);
            recyclerView.setAdapter(adapter);
            adapter.notifyDataSetChanged();

        }

答案 3 :(得分:0)

在将数据添加到 ArrayList 之前只需清除列表。这意味着当您单击后按时,它会先清除,然后将数据插入列表中。所以你总能得到一个更新的列表。

list.clear()