Skip to content

Commit 1ec5dbe

Browse files
Added new methods
1 parent 886945e commit 1ec5dbe

File tree

5 files changed

+185
-2
lines changed

5 files changed

+185
-2
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.drapps.selectionalertdialog;
2+
3+
import android.content.Context;
4+
import android.view.GestureDetector;
5+
import android.view.MotionEvent;
6+
import android.view.View;
7+
8+
import androidx.recyclerview.widget.RecyclerView;
9+
10+
class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
11+
private RecyclerItemClickListener.OnItemClickListener mListener;
12+
private GestureDetector mGestureDetector;
13+
14+
public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, RecyclerItemClickListener.OnItemClickListener listener) {
15+
this.mListener = listener;
16+
this.mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
17+
public boolean onSingleTapUp(MotionEvent e) {
18+
return true;
19+
}
20+
21+
public void onLongPress(MotionEvent e) {
22+
View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
23+
if (childView != null && RecyclerItemClickListener.this.mListener != null) {
24+
RecyclerItemClickListener.this.mListener.onItemLongClick(childView, recyclerView.getChildAdapterPosition(childView));
25+
}
26+
27+
}
28+
});
29+
}
30+
31+
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
32+
View childView = view.findChildViewUnder(e.getX(), e.getY());
33+
if (childView != null && this.mListener != null && this.mGestureDetector.onTouchEvent(e)) {
34+
this.mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
35+
}
36+
37+
return false;
38+
}
39+
40+
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
41+
}
42+
43+
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
44+
}
45+
46+
public interface OnItemClickListener {
47+
void onItemClick(View var1, int var2);
48+
49+
void onItemLongClick(View var1, int var2);
50+
}
51+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.drapps.selectionalertdialog;
2+
3+
import android.content.Context;
4+
import android.view.LayoutInflater;
5+
import android.view.View;
6+
import android.view.ViewGroup;
7+
import android.widget.RadioButton;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
import androidx.recyclerview.widget.RecyclerView;
13+
14+
public class SingleSelectionAdapter extends RecyclerView.Adapter<SingleSelectionAdapter.SingleSelectionHolder> {
15+
private List<String> dataList = new ArrayList<>();
16+
Context context;
17+
String currentField;
18+
19+
public class SingleSelectionHolder extends RecyclerView.ViewHolder {
20+
21+
public RadioButton radioButton;
22+
23+
24+
SingleSelectionHolder(View view) {
25+
super(view);
26+
radioButton = view.findViewById(R.id.radio_btn_single_selection);
27+
28+
}
29+
}
30+
31+
32+
public SingleSelectionAdapter(ArrayList<String> contentList, Context context, String currentField) {
33+
this.context = context;
34+
this.dataList = contentList;
35+
this.currentField = currentField;
36+
37+
}
38+
39+
@Override
40+
public SingleSelectionHolder onCreateViewHolder(ViewGroup parent, int viewType) {
41+
View itemView = LayoutInflater.from(parent.getContext())
42+
.inflate(R.layout.layout_single_selection, parent, false);
43+
44+
return new SingleSelectionHolder(itemView);
45+
}
46+
47+
public void onBindViewHolder(SingleSelectionHolder holder, int position) {
48+
if (dataList.get(position).equals(currentField)) {
49+
holder.setIsRecyclable(false);
50+
holder.radioButton.setChecked(true);
51+
52+
} else {
53+
holder.radioButton.setChecked(false);
54+
}
55+
56+
holder.radioButton.setText(dataList.get(position));
57+
58+
}
59+
60+
@Override
61+
public int getItemCount() {
62+
return dataList.size();
63+
}
64+
}

selectionalertdialog/src/main/java/com/drapps/selectionalertdialog/SingleSelectionDialog.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@
22

33
import android.app.Dialog;
44
import android.content.Context;
5+
import android.graphics.Color;
56
import android.os.Bundle;
67
import android.view.LayoutInflater;
78
import android.view.View;
89
import android.widget.ImageView;
10+
import android.widget.LinearLayout;
911
import android.widget.RelativeLayout;
1012
import android.widget.TextView;
1113

1214
import androidx.annotation.Nullable;
1315
import androidx.appcompat.app.AppCompatActivity;
16+
import androidx.recyclerview.widget.RecyclerView;
1417

1518
import java.util.ArrayList;
19+
import java.util.HashMap;
20+
import java.util.Map;
1621

1722
public class SingleSelectionDialog extends AppCompatActivity {
1823

@@ -21,6 +26,9 @@ public class SingleSelectionDialog extends AppCompatActivity {
2126
private ArrayList<String> list;
2227
private String headerTitle = "Select";
2328
private Boolean isSearchEnabled = false;
29+
SingleSelectionAdapter dialogAdapter;
30+
private String currentField = "";
31+
private int headerColor;
2432

2533

2634
@Override
@@ -49,6 +57,10 @@ public void enableSearch(Boolean value) {
4957
isSearchEnabled = value;
5058
}
5159

60+
public void setColor(int color) {
61+
headerColor = color;
62+
}
63+
5264
public void show() {
5365
//Custom pop up dialog for selecting options
5466
try {
@@ -57,14 +69,48 @@ public void show() {
5769
dialog.setContentView(convertView);
5870
TextView tvTitle = convertView.findViewById(R.id.tv_title);
5971
ImageView imgCancel = convertView.findViewById(R.id.img_cancel_single_dialog);
72+
RecyclerView recyclerView = convertView.findViewById(R.id.recycler_single_selection);
73+
LinearLayout header = convertView.findViewById(R.id.linear_single_dialog);
6074
tvTitle.setText(headerTitle);
75+
76+
if (headerColor != 0) {
77+
try {
78+
header.setBackgroundColor(headerColor);
79+
} catch (Exception e) {
80+
e.printStackTrace();
81+
}
82+
}
6183
imgCancel.setOnClickListener(new View.OnClickListener() {
6284
@Override
6385
public void onClick(View v) {
6486
dialog.dismiss();
6587
}
6688
});
67-
dialog.show();
89+
90+
recyclerView.addOnItemTouchListener(
91+
new RecyclerItemClickListener(context, recyclerView,
92+
new RecyclerItemClickListener.OnItemClickListener() {
93+
@Override
94+
public void onItemClick(View view, int position) {
95+
dialog.dismiss();
96+
currentField = list.get(position);
97+
98+
}
99+
100+
@Override
101+
public void onItemLongClick(View view, int position) {
102+
dialog.dismiss();
103+
}
104+
105+
})
106+
);
107+
108+
if (list != null && list.size() > 0) {
109+
dialogAdapter = new SingleSelectionAdapter(list, context, currentField);
110+
recyclerView.setAdapter(dialogAdapter);
111+
dialog.show();
112+
}
113+
68114
} catch (Exception e) {
69115
e.printStackTrace();
70116
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:layout_width="match_parent"
4+
android:layout_height="wrap_content"
5+
android:orientation="vertical">
6+
7+
<RadioButton
8+
android:id="@+id/radio_btn_single_selection"
9+
android:layout_width="match_parent"
10+
android:layout_height="wrap_content"
11+
android:layout_marginLeft="10dp"
12+
android:layout_marginRight="10dp"
13+
android:padding="2dp"
14+
android:textSize="20sp" />
15+
16+
<View
17+
android:layout_width="match_parent"
18+
android:layout_height="1dp"
19+
android:layout_marginLeft="10dp"
20+
android:layout_marginTop="2dp"
21+
android:layout_marginRight="10dp" />
22+
</LinearLayout>

0 commit comments

Comments
 (0)