我有一个要设置为列表视图的列表适配器,有一个布局用于列表视图和我的适配器。 是否可以在此列表上自动刷新值?

这是我的代码

class VehicleListFragment extends Fragment {

    private ProgressDialog pDialog;
    private ListView lv;

    public static String baseUrl = "http://mark.journeytech.com.ph/mobile_api/";
    public static NetworkAPI networkAPI;

    public ArrayList<HashMap<String, String>> vehicle = new ArrayList<>();
    String a = "";

    ArrayList pna;

    public interface NetworkAPI {
        @POST("vehicle_details.php")
        @Headers({"Content-Type:application/json; charset=UTF-8"})
        Call<JsonElement> loginRequest(@Body VehicleRequestPojo body);
    }

    public static class VehicleRequestPojo {
        String ucsi_num;
        String client_table;
        String markutype;

        public VehicleRequestPojo(String ucsi_num, String client_table, String markutype) {
            this.ucsi_num = ucsi_num;
            this.client_table = client_table;
            this.markutype = markutype;
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        searchItem.setVisible(false);
    }

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

        MainActivity csActivity;
        csActivity = (MainActivity) getActivity();
        csActivity.getSupportActionBar().setTitle("Vehicle List");

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_vehicle, container, false);
        lv = (ListView) v.findViewById(R.id.list);

        new GetVehicles().execute();

        return v;
    }

    private class GetVehicles extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            // Showing progress dialog
            pDialog = new ProgressDialog(getActivity());
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpLoggingInterceptor logging = new HttpLoggingInterceptor();

            logging.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

            httpClient.addInterceptor(logging);
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(httpClient.build())
                    .build();

            networkAPI = retrofit.create(NetworkAPI.class);

            VehicleRequestPojo loginRequest = new VehicleRequestPojo(MainActivity.ucsi_num, client_table, markutype);

            Call<JsonElement> call = networkAPI.loginRequest(loginRequest);

            call.enqueue(new Callback<JsonElement>() {
                @Override
                public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
                    // success response
                    if (response.body().isJsonArray()) {
                        JsonArray objectWhichYouNeed = response.body().getAsJsonArray();
                        System.out.println(objectWhichYouNeed);

                        for (int i = 0; i < response.body().getAsJsonArray().size(); i++) {
                            JsonElement je = response.body().getAsJsonArray().get(i);
                            JsonObject jo = je.getAsJsonObject();

                            String plate_n = jo.get("plate_num").toString();
                            String plate_nString = plate_n;
                            plate_nString = plate_nString.replace("\"", "");
                            String plate_num = String.valueOf(plate_nString);

                            String gps_n = jo.get("gps_num").toString();
                            String gps_nString = gps_n;
                            gps_nString = gps_nString.replace("\"", "");
                            String gps_num = String.valueOf(gps_nString);

                            String locat = jo.get("location").toString();
                            String locatString = locat;
                            locatString = locatString.replace("\"", "");
                            String location = String.valueOf(locatString);

                            String da = jo.get("date").toString();
                            String daString = da;
                            daString = daString.replace("\"", "");
                            String date = String.valueOf(daString);

                            String ti = jo.get("time").toString();
                            String tiString = ti;
                            tiString = tiString.replace("\"", "");
                            String time = String.valueOf(tiString);

                            String lati = jo.get("lat").toString();
                            String latiString = lati;
                            latiString = latiString.replace("\"", "");
                            String lat = String.valueOf(latiString);

                            String longi = jo.get("lng").toString();
                            String longiString = longi;
                            longiString = longiString.replace("\"", "");
                            String lng = String.valueOf(longiString);

                            String en = jo.get("engine").toString();
                            String enString = en;
                            enString = enString.replace("\"", "");
                            String engine = String.valueOf(enString);

                            String re = jo.get("remarks").toString();
                            String reString = re;
                            reString = reString.replace("\"", "");
                            String remarks = String.valueOf(reString);

                            if (lat != null && !lat.equals("null") || (lng != null && !lng.equals("null"))) {
                                // tmp hash map for detail [single]
                                HashMap<String, String> details = new HashMap<>();

                                // adding each child node to HashMap key => value
                                details.put("plate_num", plate_num);
                                details.put("gps_num", gps_num);
                                details.put("location", location);
                                details.put("date", date);
                                details.put("time", time);
                                details.put("lat", lat);
                                details.put("lng", lng);
                                details.put("engine", engine);
                                details.put("remarks", remarks);

                                a = details.get("date");

                                // adding vehicle to vehicle list
                                vehicle.add(details);

                                /**
                                 * Updating parsed JSON data into ListView
                                 * */
                                final ListAdapter adapter = new SimpleAdapter(getContext(), vehicle,
                                        R.layout.list_vehicle, new String[]{"plate_num",
                                        "location", "date", "time", "lat", "lng", "engine",
                                        "remarks",},
                                        new int[]{R.id.plate_num, R.id.location, R.id.date, R.id.time, R.id.latitude, R.id.longitude,
                                                R.id.engine, R.id.remarks});

//                                lv.setAdapter(adapter);

                                lv.invalidateViews();
                                lv.refreshDrawableState();

                                lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                    @Override
                                    public void onItemClick(AdapterView<?> adapterView, View v, int position, long l) {

                                        TextView plate_n = (TextView) v.findViewById(R.id.plate_num);
                                        TextView dat = (TextView) v.findViewById(R.id.date);
                                        TextView tim = (TextView) v.findViewById(R.id.time);
                                        TextView loc = (TextView) v.findViewById(R.id.location);
                                        TextView lat = (TextView) v.findViewById(R.id.latitude);
                                        TextView lng = (TextView) v.findViewById(R.id.longitude);
                                        TextView eng = (TextView) v.findViewById(R.id.engine);
                                        TextView rem = (TextView) v.findViewById(R.id.remarks);

                                        String plate_num = plate_n.getText().toString();
                                        String date = dat.getText().toString();
                                        String time = tim.getText().toString();
                                        String location = loc.getText().toString();
                                        String latitude = lat.getText().toString();
                                        String longitude = lng.getText().toString();
                                        String engine = eng.getText().toString();
                                        String remarks = rem.getText().toString();

                                        Bundle bundle = new Bundle();
                                        bundle.putString("plate_num", plate_num);
                                        bundle.putString("date", date);
                                        bundle.putString("time", time);
                                        bundle.putString("location", location);
                                        bundle.putString("latitude", latitude);
                                        bundle.putString("longitude", longitude);
                                        bundle.putString("engine", engine);
                                        bundle.putString("remarks", remarks);


                                        if ((!latitude.equals("") && latitude != null) || (!longitude.equals("") && longitude != null)) {
                                            Fragment mFragment = new VehicleListMapFragment(getActivity(), getActivity());
                                            getFragmentManager().beginTransaction().addToBackStack("sd").replace(R.id.mainLayout, mFragment).commit();

                                            mFragment.setArguments(bundle);
                                        } else {
                                            Toast.makeText(getContext(), "Invalid Data.", Toast.LENGTH_LONG).show();
                                        }

                                    }
                                });

                            }

                        }

                    } else {
                        System.out.println("Not a JSONArray.");
                    }

                }


                @Override
                public void onFailure(Call<JsonElement> call, Throwable t) {
                    // failure response
                    System.out.println(call.toString());
                }

            });
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
        }
    }

}

另外,我有这个

Fragment mFragment = new VehicleListMapFragment(getActivity(), getActivity());
                                            getFragmentManager().beginTransaction().addToBackStack("sd").replace(R.id.mainLayout, mFragment).commit();

转到下一个片段,在该片段中我只是使用该代码替换布局。 每当我转到下一个片段并按返回按钮时,此布局上的值就会加倍。 你可以吗 解释解决办法? 非常感谢您的回答!

#1楼 票数:1

添加对象之前,请清除车辆的 ArrayList。

vehicle.clear();

然后,

vehicle.add(details);

并使用adapter.notifyDataSetChanged(); 您想刷新 ListView的位置

  ask by translate from so

未解决问题?本站智能推荐:

2回复

在列表视图上应用自定义适配器

我做了一个自定义的适配器,并用数据填充它。 我已经使用Logcat来查看我传递给自定义Adapter类的数组是否包含数据,并且它确实包含该数据。 我得到的错误如下。 创建此CategoryBlog时会发生。 活动已创建,但不包含列表视图 'mainblogpost'包含包含我要填充的
2回复

在片段上设置列表视图适配器

您好,我正在尝试进行设置,因此我目前在我的应用程序上的片段上有一个列表视图,如果我尝试使用我的应用程序运行它,它会崩溃,如果它在片段上,但如果它在主要活动上,它将起作用。 我想知道是否有人可以告诉我我必须对代码的最后一段进行什么更改才能使其在片段上工作下面的代码代表我的主要活动和它的 XML,它应该
2回复

在适配器列表视图中单击按钮后,片段未刷新

我有五个标签,分别是1.home 2.menu 3.cart 4.account 5.more。这里的购物车标签包含列表视图,其中包含删除按钮, 当我单击该删除按钮时,它必须刷新片段本身,以便它可以从Json加载新数据 MainActivity.class TabAdapter.cl
5回复

Android列表视图项在适配器中单击

我有一个Fragment类和相应的适配器类。 我的Fragment类看起来像这样- 在MyAdapter中 我想在点击监听器上实现列表视图项。 我在哪里实施? 如果我尝试在片段的onCreateView中执行此操作,则它为null。
1回复

片段中具有定制适配器的定制列表视图

我正在制作一个应用程序,其中有一个活动已实现了底部导航栏和导航栏。 当我通过意图加载另一个活动时,它会加载页面,但导航栏都消失了。 但是,当我加载片段类时,两个导航栏也会显示,它们也可以工作,页面也将加载。 我已经在活动扩展类中使用自定义适配器实现了listview,但是对于片段类却无法
1回复

fragment、viewPager、列表视图和适配器不起作用

我有这个问题: “错误:(51, 16)错误:无法将类 ScrollableTabsActivity.ViewPagerAdapter 中的方法 addFrag 应用于给定类型;必需:TwoFragment,找到的字符串:OneFragment,字符串原因:无法通过方法调用转换将实参 OneFr
1回复

搜索项目列表视图适配器片段

我有一个带有自定义单项视图的列表视图,该视图显示标题和图像。 我已经实现了一个搜索栏来按标题搜索项目,但是当我尝试搜索某些内容时,我有一个nullpointerexception。 当适配器中只有标题时(所有项目中的图像均相同),它可以正常工作。 但是现在在新适配器中,我还更改了任何单个项
1回复

Android两个列表视图和适配器

我有下面的布局文件:2 listviews,2 textview,2 mapfragments,当我尝试使用adatper加载我的String []到第一个listView我有奇怪的错误。 有什么建议是错的吗? 我确定这个问题是因为listview和适配器。 当我删除它并开始没有适配器的活