片段,齐射和RecyclerView

编程入门 行业动态 更新时间:2024-10-25 23:24:45
本文介绍了片段,齐射和RecyclerView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我希望外面有人可以帮助我解决我的问题.我有3个选项卡的android应用程序,我使用片段,第一个选项卡是recyclerView列表,第二个选项卡是map.问题出在选项卡1中,我需要通过截取来获取数据以在选项卡1上运行recyclerView,如果运行良好,但我无法在第一个应用启动时看到数据,但是当我更改选项卡并再次回到选项卡1时,它将刷新数据并在recyclerView上显示数据.

I hope someone out there can help me solve my problem. I have android app that have 3 tabs, i use fragment, first tab is recyclerView list, second tabs is map. the problem is in tabs 1, i need to fetch data with volley to recyclerView on tabs 1, if run fine but i cannot see the data on first app start, but when i change tab and back to tab 1 again it will refresh the data and show the data on recyclerView.

Adapter.java

Adapter.java

public class CustomListAdapterWarkop extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<Warkop> mWarkop; private LayoutInflater inflater; public CustomListAdapterWarkop(Context context, List<Warkop> mWarkop) { this.context=context; inflater= LayoutInflater.from(context); this.mWarkop = mWarkop; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.list_warkop_row, parent, false); ItemViewHolder holder = new ItemViewHolder(view); return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ItemViewHolder viewHolder = (ItemViewHolder) holder; Warkop current = mWarkop.get(position); viewHolder.tvNamaWarkop.setText(current.getNamaWarkop()); ImageLoader imageLoader = ImageLoader.getInstance(); DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true) .cacheOnDisc(true).resetViewBeforeLoading(true) .showImageForEmptyUri(R.drawable.noimage) .showImageOnFail(R.drawable.noimage) .showImageOnLoading(R.drawable.noimage).build(); imageLoader.displayImage(current.getFotoWarkop(), viewHolder.ivFotoWarkop, options); } @Override public int getItemCount() { return mWarkop.size(); } }

ItemHolder.java

ItemHolder.java

package com.andylah.warkopedia; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageView; import android.widget.TextView; /** * Created by andylah on 11/3/2017. */ public class ItemViewHolder extends RecyclerView.ViewHolder { public ImageView ivFotoWarkop; public TextView tvNamaWarkop; public ItemViewHolder(View itemView) { super(itemView); tvNamaWarkop = itemView.findViewById(R.id.nama_warkop); ivFotoWarkop = itemView.findViewById(R.id.image_warkop); } }

标签1.java

public class tabSatu extends Fragment { private static final String TAG = tabDua.class.getSimpleName(); public static final int CONNECTION_TIMEOUT = 10000; public static final int READ_TIMEOUT = 15000; private boolean isFragmentLoaded = false; View vTabSatu; private RecyclerView recyclerView; public static List<Warkop> warkopList = new ArrayList<Warkop>(); private CustomListAdapterWarkop warkopAdapter; public tabSatu(){ } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { new AsyncFetch().execute(); vTabSatu = inflater.inflate(R.layout.tabsatu_view, container, false); recyclerView = vTabSatu.findViewById(R.id.warkop_container); LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager); Log.d("LOG : ", "onCreatedView Run"); // Inflate the layout for this fragment return vTabSatu; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); warkopAdapter = new CustomListAdapterWarkop(getActivity(), warkopList); warkopAdapter.notifyDataSetChanged(); recyclerView.setAdapter(warkopAdapter); Log.d("LOG : ", "onViewCreated Run"); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser && !isFragmentLoaded ) { // Load your data here or do network operations here isFragmentLoaded = true; //new AsyncFetch().execute(); }else{ isFragmentLoaded = false; Log.d("LOG : ", "isFragmentLoaded = false"); } } private class AsyncFetch extends AsyncTask<String, String, String> { ProgressDialog pDialog = new ProgressDialog(getActivity()); HttpURLConnection conn; URL url = null; @Override protected void onPreExecute() { super.onPreExecute(); pDialog.setMessage("Loading list warkop ..."); pDialog.setCancelable(false); pDialog.show(); } @Override protected String doInBackground(String... strings) { try { // Enter URL address where your json file resides // Even you can make call to php file which returns json data url = new URL(AppConfig.LOAD_WARKOP); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); return e.toString(); } try { // Setup HttpURLConnection class to send and receive data from php and mysql conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(READ_TIMEOUT); conn.setConnectTimeout(CONNECTION_TIMEOUT); conn.setRequestMethod("POST"); // setDoOutput to true as we recieve data from json file conn.setDoOutput(true); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); return e1.toString(); } try { int response_code = conn.getResponseCode(); // Check if successful connection made if (response_code == HttpURLConnection.HTTP_OK) { // Read data sent from server InputStream input = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(input)); StringBuilder result = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { result.append(line); } // Pass data to onPostExecute method return (result.toString()); } else { return ("unsuccessful"); } } catch (IOException e) { e.printStackTrace(); return e.toString(); } finally { conn.disconnect(); } } @Override protected void onPostExecute(String result) { pDialog.dismiss(); try{ JSONObject object = new JSONObject(result); String getObject = object.getString("warkop"); JSONArray jsonArray = new JSONArray(getObject); boolean error = object.getBoolean("error"); if(!error){ for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); Warkop warkop = new Warkop(); warkop.setNamaWarkop(jsonObject.getString("nama_warkop")); warkop.setAlamatWrkop(jsonObject.getString("alamat_warkop")); warkop.setKotaWarkop(jsonObject.getString("kota_warkop")); warkop.setLatWarkop(Double.parseDouble(jsonObject.getString("lat_warkop"))); warkop.setLangWarkop(Double.parseDouble(jsonObject.getString("long_warkop"))); warkop.setIsWifi(Integer.parseInt(jsonObject.getString("is_wifi"))); warkop.setIsToilet(Integer.parseInt(jsonObject.getString("is_toilet"))); warkop.setIsTv(Integer.parseInt(jsonObject.getString("is_tv"))); warkop.setIsColokan(Integer.parseInt(jsonObject.getString("is_colokan"))); warkop.setIsParkir(Integer.parseInt(jsonObject.getString("is_parkir"))); warkop.setFotoWarkop(jsonObject.getString("foto_warkop")); warkopList.add(warkop); } }else{ String errorMsg = object.getString("error_msg"); Toast.makeText(getContext(), errorMsg, Toast.LENGTH_LONG).show(); } }catch (JSONException e) { e.printStackTrace(); Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); } } } }

推荐答案

问题:即使您调用notifyDataSetChanged(),但适配器中也没有数据.

Problem: Even you call notifyDataSetChanged() but there are no data in Adapter.

@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); warkopAdapter = new CustomListAdapterWarkop(getActivity(), warkopList); warkopAdapter.notifyDataSetChanged(); recyclerView.setAdapter(warkopAdapter); }

因此,您需要在API调用后设置warkopList并将其通知给Adapter.它将为您提供帮助.

So you need to set and notify warkopList to Adapter after API call. It will help you.

tabSatu:

@Override protected void onPostExecute(String result) { pDialog.dismiss(); try { JSONObject object = new JSONObject(result); String getObject = object.getString("warkop"); JSONArray jsonArray = new JSONArray(getObject); boolean error = object.getBoolean("error"); if (!error) { for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); Warkop warkop = new Warkop(); ... warkopList.add(warkop); adapter.setItems(warkopList); } } ... }

CustomListAdapterWarkop:将setItem()方法添加到适配器

CustomListAdapterWarkop: add setItem() method to Adapter

public class CustomListAdapterWarkop extends RecyclerView.Adapter<RecyclerView.ViewHolder> { ... public void setItems(List<WarkopList> warkopList) { mWarkop = warkopList; notifyDataSetChanged(); } ... }

更多推荐

片段,齐射和RecyclerView

本文发布于:2023-11-16 14:22:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1605077.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:片段   RecyclerView

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!