Simple Android RecyclerView example

前端 未结 11 1417
名媛妹妹
名媛妹妹 2020-11-22 02:03

I\'ve made a list of items a few times using Android\'s RecyclerView, but it is a rather complicated process. Going through one of the numerous tutorials online

11条回答
  •  一生所求
    2020-11-22 02:38

    Dependencies

    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'com.android.support:support-v4:25.3.1'
    compile 'com.lguipeng.bubbleview:library:1.0.0'
    compile 'com.larswerkman:HoloColorPicker:1.5'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
    

    One Class For Click Item

    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.GestureDetector;
    import android.view.MotionEvent;
    import android.view.View;
    
    public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
        private OnItemClickListener mListener;
    
        public interface OnItemClickListener {
            public void onItemClick(View view, int position);
        }
    
        GestureDetector mGestureDetector;
    
        public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
            mListener = listener;
            mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    return true;
                }
            });
        }
    
        @Override
        public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
            View childView = view.findChildViewUnder(e.getX(), e.getY());
            if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
                mListener.onItemClick(childView, view.getChildPosition(childView));
                return true;
            }
            return false;
        }
    
        @Override
        public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
    
        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
    
        }
    
    
    }
    

    Second Class RecyclerView

    import android.annotation.SuppressLint;
    import android.app.ProgressDialog;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v4.content.LocalBroadcastManager;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Toast;
    
    import com.android.volley.DefaultRetryPolicy;
    import com.android.volley.Request;
    import com.android.volley.RequestQueue;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.toolbox.StringRequest;
    import com.android.volley.toolbox.Volley;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.util.ArrayList;
    
    public class SLByTopics extends Fragment {
    
    
        public static ArrayList byTopicsMainArrayList=new ArrayList<>();
    
    
        TabRefreshReceiver tabRefreshReceiver;
        RecyclerView recyclerView;
        SAdpByTopics sAdpByTopics;
        public ArrayList mByTopicsArrayList=new ArrayList<>();
        ProgressDialog progressDialog;
    
        public SLByTopics(){
        }
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.sl_fragment_by_topics, container, false);
    
            progressDialog = new ProgressDialog(getActivity());
            if (IsOnline.isNetworkAvailable(getActivity())) {
                getCategoryTree();
            } else{
                IsOnline.showNoInterNetMessage(getActivity());
            }
            tabRefreshReceiver = new TabRefreshReceiver();
           LocalBroadcastManager.getInstance(getContext()).registerReceiver(tabRefreshReceiver, new IntentFilter("BY_TOPICS"));
    
            setUpView(view);
            return view;
        }
    
        private void setUpView(View view) {
    
            recyclerView=(RecyclerView)view.findViewById(R.id.by_topics_list_recyclerView);
            LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity());
            linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            recyclerView.setLayoutManager(linearLayoutManager);
        }
    
        @Override
        public void onResume() {
            super.onResume();
    
            recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View view, final int position) {
    
                    if (mByTopicsArrayList.get(position).getChild().size()>0){
                        Intent intent = new Intent(getActivity(), SByTopicCategory.class);
                        intent.putExtra("selectedCategoryName",mByTopicsArrayList.get(position).getCatname());
                        intent.putExtra("jsonData",mByTopicsArrayList.get(position).getMainTopicJson());
                        startActivity(intent);
                        getActivity().overridePendingTransition(R.anim.activity_in, R.anim.activity_out);
                    }else {
                        Intent intent = new Intent(getActivity(), SByCategoryQuestionList.class);
                        intent.putExtra("selectedSubCategoryName",mByTopicsArrayList.get(position).getCatname());
                        intent.putExtra("catID",mByTopicsArrayList.get(position).getId());
                        startActivity(intent);
                        getActivity().overridePendingTransition(R.anim.activity_in, R.anim.activity_out);
                    }
                }
            }));
    
        }
    
        private class TabRefreshReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                try {
                    FragmentTransaction ft = getFragmentManager().beginTransaction();
                    ft.detach(SLByTopics.this).attach(SLByTopics.this).commit();
                    LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(tabRefreshReceiver);
                } catch (Exception e) {
                    e.printStackTrace();
                }
    
            }
        }
    
        private void getCategoryTree() {
            progressDialog.setMessage("Please Wait...");
            progressDialog.setCancelable(false);
            progressDialog.show();
    
            StringRequest stringRequest = new StringRequest(Request.Method.POST, Const.HOSTNAME + Const.STUDENT_GET_CATEGORY_TREE,
                    new Response.Listener() {
                        @SuppressLint("LongLogTag")
                        @Override
                        public void onResponse(String response) {
                            try {
                                JSONObject object = new JSONObject(response);
                                String status = object.getString("status");
                                int i = Integer.parseInt(status);
    
                                switch (i) {
    
                                    case 0:
                                        progressDialog.dismiss();
    //                                    Toast.makeText(getActivity(), "getCategorySuccess", Toast.LENGTH_SHORT).show();
                                        Log.e("getCategoryTree Response", "getCategoryTree Response : " + response);
    
                                        try {    
                                            byTopicsMainArrayList.clear();
                                            JSONArray info = object.getJSONArray("info");
                                            if (info.length() > 0) {
                                                for (i = 0; i < info.length(); i++) {
                                                    JSONObject data = info.getJSONObject(i);
                                                    MByTopics mByTopics = new MByTopics();
                                                    mByTopics.setId(data.getString("id"));
                                                    mByTopics.setCatname(data.getString("catname"));
                                                    mByTopics.setMainTopicJson(data.toString());
    
                                                    JSONArray topicChildren = data.getJSONArray("children");
                                                    ArrayList byChildrenArrayList = new ArrayList<>();
    
                                                    for (int j = 0; j < topicChildren.length(); j++) {
                                                        JSONObject topicChildrenData = topicChildren.getJSONObject(j);
                                                        SMByTopicCategory smByTopicCategory = new SMByTopicCategory();
                                                        smByTopicCategory.setId(topicChildrenData.getString("id"));
                                                        smByTopicCategory.setCatname(topicChildrenData.getString("catname"));
                                                        smByTopicCategory.setChildTopicJson(topicChildrenData.toString());
    
                                                        JSONArray topicChildrenQuestion = topicChildrenData.getJSONArray("children");
                                                        ArrayList byChildrenSubArrayList = new ArrayList<>();
    
                                                        for (int k = 0; k < topicChildrenQuestion.length(); k++) {
                                                            JSONObject topicChildrenSubData = topicChildrenQuestion.getJSONObject(k);
                                                            SMByTopicSubCategory smByTopicSubCategory = new SMByTopicSubCategory();
                                                            smByTopicSubCategory.setId(topicChildrenSubData.getString("id"));
                                                            smByTopicSubCategory.setCatname(topicChildrenSubData.getString("catname"));
                                                            smByTopicSubCategory.setChildSubTopicJson(topicChildrenSubData.toString());
    
                                                            byChildrenSubArrayList.add(smByTopicSubCategory);
                                                        }
    
                                                        smByTopicCategory.setQuestions(byChildrenSubArrayList);
    
                                                        byChildrenArrayList.add(smByTopicCategory);
                                                    }
                                                    mByTopics.setChild(byChildrenArrayList);
                                                    byTopicsMainArrayList.add(mByTopics);
                                                }
    
    
                                                mByTopicsArrayList.clear();
                                                mByTopicsArrayList=byTopicsMainArrayList;
                                                sAdpByTopics=new SAdpByTopics(mByTopicsArrayList,getActivity());
                                                recyclerView.setAdapter(sAdpByTopics);
                                                sAdpByTopics.notifyDataSetChanged();
    
                                            }
    
                                        }catch (Exception e){
                                            e.printStackTrace();
                                        }
                                        break;
    
                                    default:
                                        progressDialog.dismiss();
    //                                    Toast.makeText(getActivity(), "getCategoryError : " + response, Toast.LENGTH_SHORT).show();
                                        Log.e("getCategoryTree Not Response", "getCategoryTree Uploading Not Response : " + response);
                                }
    
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            progressDialog.dismiss();
                            Log.e("getCategoryTree Error :","getCategoryTree Error :"+error.getMessage());
    //                        Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_LONG).show();
                        }
                    }){
    
            };/* {
                @Override
                protected Map getParams() throws AuthFailureError {
    
                    Map map = new HashMap();
    //                map.put("uid", String.valueOf(ConfigManager.getUserId()));
                    return map;
                }
            };*/
    
            stringRequest.setRetryPolicy(new DefaultRetryPolicy(
                    0,
                    DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    
            RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
            requestQueue.add(stringRequest);
        }
    }
    

    Adapter Class For Recycler Item

    import android.app.Activity;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    import java.util.ArrayList;
    
    public class SAdpByTopics extends RecyclerView.Adapter {
            ArrayList topicsArrayList=new ArrayList<>();
            Activity activity;
    
         public SAdpByTopics(ArrayList topicsArrayList,Activity activity){
            this.topicsArrayList=topicsArrayList;
            this.activity=activity;
         }
    
         @Override
         public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View itemeView= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_by_topic_list,parent,false);
            RecyclerView.ViewHolder holder=new Holder(itemeView);
            holder.setIsRecyclable(false);
            return holder;
         }
    
         @Override
         public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
             final Holder classHolder = (Holder) holder;
             try{
                 classHolder.txt_topic_name.setText(topicsArrayList.get(position).getCatname());
             }catch (Exception e){
                 e.printStackTrace();
             }
         }
    
         @Override
         public int getItemCount() {
            return topicsArrayList.size();
         }
    
    
    class Holder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView txt_topic_name;
    
        public Holder(View itemView) {
            super(itemView);
            txt_topic_name = (TextView) itemView.findViewById(R.id.txt_topic_name);
        }
    
        @Override
        public void onClick(View v) {
    
        }
    }
    }
    

    Module Class

    public class MByTopics {
    
        String id;
        String topicName;
        String catname;
        String MainTopicJson;
        ArrayList child;
        ArrayList questions;
    
        public void setId(String id){
            this.id=id;
        }
        public String getId(){
            return  id;
        }
    
        public void setCatname(String catname) {
            this.catname = catname;
        }
    
        public String getCatname() {
            return catname;
        }
    
        public void setTopicName(String topicName) {
            this.topicName = topicName;
        }
        public String getTopicName() {
            return topicName;
        }
    
        public void setChild(ArrayList child) {
            this.child = child;
        }
    
        public String getMainTopicJson() {
            return MainTopicJson;
        }
    
        public void setMainTopicJson(String mainTopicJson) {
            MainTopicJson = mainTopicJson;
        }
    
        public ArrayList getChild() {
            return child;
        }
    
        public void setQuestions(ArrayList questions) {
            this.questions = questions;
        }
    
        public ArrayList getQuestions() {
            return questions;
        }
    
        public ArrayList getByTopicList() {
            ArrayList mByTopicsArrayList = new ArrayList<>();
    
            for (int i=0;i<11;i++){
                MByTopics mQuestionBankCategory=new MByTopics();
    
                if (i==1 || i== 5|| i==9){
                    mQuestionBankCategory.setTopicName("Microeconomics");
                }else  if (i==2 || i== 10|| i==6) {
                    mQuestionBankCategory.setTopicName("Macroeconomics");
                }else {
                    mQuestionBankCategory.setTopicName("Current Isssues");
                }
    
                mByTopicsArrayList.add(mQuestionBankCategory);
            }
    
            return mByTopicsArrayList;
        }
    
    }
    

提交回复
热议问题