Активность занимает слишком много времени для загрузки - PullRequest
0 голосов
/ 16 сентября 2018

Я новичок в Android.Я создал просмотрщик, который анализирует данные из JSON.Я установил прослушиватель «onclick» для всех элементов в окне «Переработчик», который открывает новое действие и показывает подробности об элементе «Переработчик».Моя проблема в том, что, когда я щелкаю по элементу программы просмотра отходов, загрузка занимает 4-5 секунд, могу ли я сделать это быстрее, помогите.

Код моей активности

public class Tab1 extends Fragment implements ExampleAdapter.onItemClickListener{
    private RecyclerViewPager mRecyclerView;
    private ExampleAdapter mExampleAdapter;
    private ArrayList<ExampleItem> mExampleList;
    private RequestQueue mRequestQueue;
    public static final String EXTRA_URL = "imageUrl";
    private ShimmerFrameLayout mShimmerViewContainer;
    Button sharebuttonz;
    File imagePathz;
    @Nullable
    @Override

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ((AppCompatActivity) getActivity()).getSupportActionBar().hide();
        View rootView = inflater.inflate(R.layout.tab1, container, false);
        mRecyclerView = rootView.findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mShimmerViewContainer = rootView.findViewById(R.id.shimmer_view_container);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
        mExampleList = new ArrayList<>();
        mRequestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());


        // Set the adapter here.
        // Use getActivity() instead of getContext()
        parseJson();
        mExampleAdapter = new ExampleAdapter(getActivity(), mExampleList);
        mRecyclerView.setAdapter(mExampleAdapter);
        mExampleAdapter.setOnItemClickListener(Tab1.this);


      return rootView;
    }



    private void parseJson() {
        String url = "http://maranamassapp.cf/json_getdata.php";
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("server_response");
                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject ser = jsonArray.getJSONObject(i);
                                String creatorname = ser.getString("head");
                                String imageUrl = ser.getString("image");
                                String cat = ser.getString("content");
                                String postdate = ser.getString("weburl");
                                String dateall = ser.getString("date");
                                int type = ser.getInt("type");

                                mExampleList.add(new ExampleItem(imageUrl, creatorname, cat, postdate, dateall,type));
                            }



                            // Just call notifyDataSetChanged here
                            mExampleAdapter.notifyDataSetChanged();
                            mShimmerViewContainer.stopShimmerAnimation();
                            mShimmerViewContainer.setVisibility(View.GONE);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mRequestQueue.add(request);
    }


        public void onItemClick(int position) {
            Intent detailintent = new Intent(getContext(), DetailActivity.class);
            ExampleItem clickeditem = mExampleList.get(position);
            detailintent.putExtra(EXTRA_URL, clickeditem.getmDate());
            startActivity(detailintent);
    }
}

Код моего адаптера

public class ExampleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context mContext;
    private ArrayList<ExampleItem> mExampleList;
    private onItemClickListener mListener;


    public interface onItemClickListener {
        void onItemClick(int position);
    }

    public void setOnItemClickListener(onItemClickListener listener) {
        mListener = listener;
    }

    public class ExampleViewHolder extends RecyclerView.ViewHolder {
        public ImageView mImageView;
        public TextView mTextViewCreator;
        public TextView mTextViewCat;
        public TextView mDateAll;

        public ExampleViewHolder(View itemView) {
            super(itemView);
            mImageView = itemView.findViewById(R.id.image_view);
            mTextViewCreator = itemView.findViewById(R.id.text_view_creator);
            mTextViewCat = itemView.findViewById(R.id.text_view_cat);
            mDateAll = itemView.findViewById(R.id.date_views);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (mListener != null) {
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION) {
                            mListener.onItemClick(position);
                        }
                    }
                }
            });
        }
    }

1 Ответ

0 голосов
/ 16 сентября 2018

Реализация слушателя на RecyclerView вместо отдельного элемента. Это лучше, поскольку позволяет избежать ненужного создания OnClickListener.

Что касается медленной загрузки активности, похоже, это проблема оптимизации макета. Согласно предложению Oğuzhan Döngül, вы должны выяснить, сохраняется ли проблема на реальном устройстве. Я бы посоветовал прочитать Улучшение производительности макета тем не менее, они показывают много хитростей, которые будут очень полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...