添加按钮单击RecyclerView中的事件

时间:2016-07-16 23:00:15

标签: android

UserAdapter.java:

public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UsersViewHolder> {
    private List<Users> usersList;
    private ImageLoader imageLoader = AppController.getInstance().getImageLoader();
    private Context mContext;

    public class UsersViewHolder extends RecyclerView.ViewHolder {
        public TextView txtUsername, txtCreatedAt;
        public NetworkImageView imgUser;
        public ImageButton btnMsg, btnDel;

        public UsersViewHolder(View view) {
            super(view);
            txtUsername = (TextView) view.findViewById(R.id.txt_username);
            txtCreatedAt = (TextView) view.findViewById(R.id.txt_created_at);
            imgUser = (NetworkImageView) view.findViewById(R.id.img_user);
            btnMsg = (ImageButton) view.findViewById(R.id.btn_msg);
            btnDel = (ImageButton) view.findViewById(R.id.btn_delete);
        }

    }

    public UsersAdapter(Context context, List<Users> usersList) {
        mContext = context;
        this.usersList = usersList;
    }

    @Override
    public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.users_list_row, parent, false);
        return new UsersViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(UsersViewHolder holder, int position) {
        Users users = usersList.get(position);
        holder.txtUsername.setText(users.getUserName() + " " + users.getUserSurname());
        holder.txtCreatedAt.setText(users.getCreatedAt());

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
        holder.imgUser.setImageUrl(users.getUserImgPath(), imageLoader);

        holder.btnMsg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT);
            }
        });
    }

    @Override
    public int getItemCount() {
        return usersList.size();
    }
}

AppliersActivity:

public class AppliersActivity extends AppCompatActivity {
    private static final String TAG = AppliersActivity.class.getSimpleName();

    private SQLiteHandler db;
    private SessionManager session;
    private ProgressDialog pDialog;

    private String uid, api_key, adId;

    private List<Users> usersList = new ArrayList<>();
    private RecyclerView recyclerView;
    private UsersAdapter mAdapter;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_appliers);

        definitions();

        getAppliers();
    }

    private void definitions() {
        adId = getIntent().getStringExtra("adId");

        // Progress dialog
        pDialog = new ProgressDialog(this);
        pDialog.setCancelable(false);

        // SqLite database handler
        db = new SQLiteHandler(getApplicationContext());

        // session manager
        session = new SessionManager(getApplicationContext());

        if (!session.isLoggedIn()) {
            logoutUser();
        }

        // Fetching user details from sqlite
        HashMap<String, String> user = db.getUserDetails();
        uid = user.get("uid");
        api_key = user.get("api_key");

        recyclerView = (RecyclerView) findViewById(R.id.appliers_recycler_view);

        mAdapter = new UsersAdapter(getApplicationContext(), usersList);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
        recyclerView.setAdapter(mAdapter);

        recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView, new OnTouchActionListener() {
            @Override
            public void onLeftSwipe(View view, int position) {

            }

            @Override
            public void onRightSwipe(View view, int position) {

            }

            @Override
            public void onClick(View view, int position) {
                String adId = usersList.get(position).getUserId();

            }
        }));
    }

    public static interface OnTouchActionListener {
        public void onLeftSwipe(View view, int position);
        public void onRightSwipe(View view, int position);
        public void onClick(View view, int position);
    }

    public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
        private OnTouchActionListener mOnTouchActionListener;
        private GestureDetectorCompat mGestureDetector;

        public RecyclerTouchListener(Context context, final RecyclerView recyclerView, OnTouchActionListener onTouchActionListener) {
            mOnTouchActionListener = onTouchActionListener;
            mGestureDetector = new GestureDetectorCompat(context,new GestureDetector.SimpleOnGestureListener(){
                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    return true;
                }

                @Override
                public void onLongPress(MotionEvent e) {
                }
            });
        }

        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

            View child = rv.findChildViewUnder(e.getX(), e.getY());
            if (child != null && mOnTouchActionListener != null && mGestureDetector.onTouchEvent(e)) {
                mOnTouchActionListener.onClick(child, rv.getChildPosition(child));
            }
            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    }

    private void getAppliers() {
        // Tag used to cancel the request
        String tag_string_req = "req_appliers";

        pDialog.setMessage("Lütfen Bekleyin...");
        showDialog();

        StringRequest strReq = new StringRequest(Request.Method.GET,
                ApiRoutes.URL_JOB_APPLIERS+ "/" + adId, new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Appliers Response: " + response.toString());
                hideDialog();

                try {
                    JSONObject jObj = new JSONObject(response);
                    boolean error = jObj.getBoolean("error");

                    // Check for error node in json
                    if (!error) {
                        usersList.clear();
                        mAdapter.notifyDataSetChanged();
                        JSONArray usersArray = jObj.getJSONArray("appliers");
                        Users users;
                        for (int i = 0; i < usersArray.length(); i++) {
                            JSONObject jsonobject = usersArray.getJSONObject(i);
                            users = new Users(jsonobject.getString("uid"), jsonobject.getString("name"), jsonobject.getString("surname"), ApiRoutes.FOLDER_IMG + "/" + jsonobject.getString("uid") + "/profile_img.png", jsonobject.getString("created_at"));
                            usersList.add(users);
                        }
                        mAdapter.notifyDataSetChanged();
                    } else {
                        String errorMsg = jObj.getString("error_msg");
                        Toast.makeText(getApplicationContext(),
                                errorMsg, Toast.LENGTH_LONG).show();
                    }
                } catch (JSONException e) {
                    // JSON error
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                }

            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "User Ads Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_LONG).show();
                hideDialog();
            }
        }) {

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<>();
                headers.put("Authorization", api_key);

                return headers;
            }

        };

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
    }

    private void showDialog() {
        if (!pDialog.isShowing())
            pDialog.show();
    }

    private void hideDialog() {
        if (pDialog.isShowing())
            pDialog.dismiss();
    }

    /**
     * Logging out the user. Will set isLoggedIn flag to false in shared
     * preferences Clears the user data from sqlite users table
     * */
    private void logoutUser() {
        session.setLogin(false);

        db.deleteUsers();

        // Launching the login activity
        Intent intent = new Intent(this, LoginActivity.class);
        startActivity(intent);
        finish();
    }
}

我在recyclerviewer的行上有两个图像按钮。我想为每一行添加click事件。我将applicationcontext从activity发送到适配器。我在适配器类中添加了onclicklistener事件。但它并没有在屏幕上显示吐司。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您不要在适配器类中调用Toast的show()方法。

将其更改为以下

(lldb) br set -r '.*a_really_unique_name.*'