Skip to content

Commit 286582b

Browse files
committed
add autocomplete, add horizontallayout
1 parent 7c22c3b commit 286582b

File tree

11 files changed

+682
-11
lines changed

11 files changed

+682
-11
lines changed

app/src/main/java/com/paperplay/androidformbuilder/ExampleJavaActivity.java

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
import android.support.annotation.Nullable;
55
import android.support.v7.app.AppCompatActivity;
66
import android.text.InputType;
7+
import android.view.View;
78
import android.widget.Button;
89
import android.widget.LinearLayout;
910
import android.widget.Toast;
1011

12+
import com.paperplay.myformbuilder.model.AutocompleteData;
13+
import com.paperplay.myformbuilder.view.HorizontalLayout;
14+
import com.paperplay.myformbuilder.view.MyAutocomplete;
1115
import com.paperplay.myformbuilder.view.MyCheckbox;
1216
import com.paperplay.myformbuilder.view.MyEdittext;
1317
import com.paperplay.myformbuilder.view.MyEdittextMultiple;
@@ -73,7 +77,6 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
7377
cityList.add(new SpinnerData(3, "3", "Jakarta"));
7478
MySpinner spinCity = new MySpinner.Builder(ExampleJavaActivity.this)
7579
.setTitle("City").setItem(cityList).setDefaultSelectedValue("Jakarta").setFormLayout(formLayout).create();
76-
// spinCity.hideItemById(2);
7780

7881
//create checkbox
7982
ArrayList<String> educationList = new ArrayList<>();
@@ -85,6 +88,27 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
8588
.setFormLayout(formLayout)
8689
.setOnCheckedListener(selected -> toast("selected: "+selected)).create();
8790

91+
//create horizontal layout
92+
MySpinner spinBaru = new MySpinner.Builder(ExampleJavaActivity.this)
93+
.setTitle("Baru Spin").setItem(cityList).setDefaultSelectedValue("Jakarta").create();
94+
MyEdittext edtBaru = new MyEdittext.Builder(ExampleJavaActivity.this).setTitle("Baru Edit").create();
95+
ArrayList<View> viewList = new ArrayList<>();
96+
viewList.add(spinBaru.getView());
97+
viewList.add(edtBaru.getView());
98+
HorizontalLayout horizontalLayout = new HorizontalLayout.Builder(ExampleJavaActivity.this)
99+
.setHorizontalMargin(25)
100+
.setViewList(viewList)
101+
.setFormLayout(formLayout)
102+
.create();
103+
104+
//create spinner data & view
105+
ArrayList<AutocompleteData> atcList = new ArrayList<>();
106+
atcList.add(new AutocompleteData(1, "1", "Satu"));
107+
atcList.add(new AutocompleteData(1, "1", "Satu Dua"));
108+
atcList.add(new AutocompleteData(3, "3", "Tiga"));
109+
MyAutocomplete myAutocomplete = new MyAutocomplete.Builder(ExampleJavaActivity.this)
110+
.setTitle("Select").setItem(atcList).setFormLayout(formLayout).create();
111+
88112
//create textview
89113
MyTextView myTextView = new MyTextView.Builder(ExampleJavaActivity.this)
90114
.setTitle("Note:").setTitleFont("fonts/Roboto-Bold.ttf")
@@ -98,7 +122,8 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
98122
+ " No: " + edtMultiple.getValue("No")
99123
+ " Zip: " + edtMultiple.getValue("Zip")
100124
+ " City: " + spinCity.getSelectedValue() +" - "+spinCity.getSelectedId()+" - "+spinCity.getSelectedSecondaryId()
101-
+ " Education: "+myCheckboxView.getAllChecked()));
125+
+ " Education: "+myCheckboxView.getAllChecked()
126+
+ " Autocomplete: "+myAutocomplete.getSelectedValue()+" "+myAutocomplete.getSelectedId()));
102127

103128
}catch (CloneNotSupportedException e){
104129
e.printStackTrace();
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package com.paperplay.myformbuilder.adapter;
2+
3+
import android.app.Activity;
4+
import android.support.annotation.NonNull;
5+
import android.support.annotation.Nullable;
6+
import android.view.LayoutInflater;
7+
import android.view.View;
8+
import android.view.ViewGroup;
9+
import android.widget.ArrayAdapter;
10+
import android.widget.Filter;
11+
import android.widget.TextView;
12+
13+
import com.paperplay.myformbuilder.R;
14+
import com.paperplay.myformbuilder.model.AutocompleteData;
15+
16+
import java.util.ArrayList;
17+
18+
/**
19+
* Created by Ahmed Yusuf on 22/08/19.
20+
*/
21+
public class AutocompleteAdapter extends ArrayAdapter<AutocompleteData>{
22+
private ArrayList<AutocompleteData> dataList, tempDataList, suggestions;
23+
private Activity activity;
24+
private int resourceId;
25+
26+
public AutocompleteAdapter(@NonNull Activity activity, int resource, ArrayList<AutocompleteData> dataList) {
27+
super(activity.getBaseContext(), resource, dataList);
28+
this.activity = activity;
29+
this.resourceId = resource;
30+
this.dataList = dataList;
31+
tempDataList = new ArrayList<>(dataList);
32+
suggestions = new ArrayList<>();
33+
}
34+
35+
@NonNull
36+
@Override
37+
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
38+
View view = convertView;
39+
try{
40+
if(convertView == null){
41+
LayoutInflater inflater = activity.getLayoutInflater();
42+
view = inflater.inflate(resourceId, parent, false);
43+
}
44+
AutocompleteData autocompleteData = getItem(position);
45+
TextView itemTitle = view.findViewById(R.id.txtRowAtcTitle);
46+
itemTitle.setText(autocompleteData.getValue());
47+
}catch (Exception e){
48+
e.printStackTrace();
49+
}
50+
return view;
51+
}
52+
53+
@Nullable
54+
@Override
55+
public AutocompleteData getItem(int position) {
56+
return dataList.get(position);
57+
}
58+
59+
@Override
60+
public int getCount() {
61+
return dataList.size();
62+
}
63+
64+
@Override
65+
public long getItemId(int position) {
66+
return position;
67+
}
68+
69+
@Override
70+
public Filter getFilter() {
71+
return dataFilter;
72+
}
73+
74+
private Filter dataFilter = new Filter() {
75+
76+
@Override
77+
public CharSequence convertResultToString(Object resultValue) {
78+
AutocompleteData autocompleteData = (AutocompleteData) resultValue;
79+
return autocompleteData.getValue();
80+
}
81+
82+
@Override
83+
protected FilterResults performFiltering(CharSequence charSequence) {
84+
if(charSequence != null) {
85+
suggestions.clear();
86+
for (AutocompleteData autocompleteData : tempDataList) {
87+
if(autocompleteData.getValue().contains(" ")){
88+
String[] split = autocompleteData.getValue().toLowerCase().split(" ");
89+
for(String sub : split){
90+
if (sub.startsWith(charSequence.toString().toLowerCase())) {
91+
suggestions.add(autocompleteData); //find for each word
92+
}
93+
}
94+
}else if (autocompleteData.getValue().toLowerCase().startsWith(charSequence.toString().toLowerCase())) {
95+
suggestions.add(autocompleteData);
96+
}
97+
}
98+
FilterResults filterResults = new FilterResults();
99+
filterResults.values = suggestions;
100+
filterResults.count = suggestions.size();
101+
return filterResults;
102+
}else{
103+
return new FilterResults();
104+
}
105+
}
106+
107+
108+
@Override
109+
protected void publishResults(CharSequence charSequence, FilterResults results) {
110+
ArrayList<AutocompleteData> tempValues = (ArrayList<AutocompleteData>)results.values;
111+
if(results != null && results.count > 0){
112+
clear();
113+
for (AutocompleteData autocompleteData : tempValues){
114+
add(autocompleteData);
115+
notifyDataSetChanged();
116+
}
117+
}else{
118+
clear();
119+
notifyDataSetChanged();
120+
}
121+
}
122+
};
123+
}

myformbuilder/src/main/java/com/paperplay/myformbuilder/adapter/SpinnerAdapter.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,11 @@
1616
* Created by Ahmed Yusuf on 22/08/19.
1717
*/
1818
public class SpinnerAdapter extends ArrayAdapter<SpinnerData>{
19-
ArrayList<SpinnerData> dataList;
20-
Context context;
19+
private ArrayList<SpinnerData> dataList;
2120

2221

2322
public SpinnerAdapter(@NonNull Context context, int resource, ArrayList<SpinnerData> dataList) {
2423
super(context, resource, dataList);
25-
this.context = context;
2624
this.dataList = dataList;
2725
}
2826

@@ -51,8 +49,4 @@ public View getDropDownView(int position, @Nullable View convertView, @NonNull V
5149
txtItem.setText(dataList.get(position).getValue());
5250
return txtItem;
5351
}
54-
55-
public void setDataList(ArrayList<SpinnerData> dataList) {
56-
this.dataList = dataList;
57-
}
5852
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.paperplay.myformbuilder.model;
2+
3+
/**
4+
* Created by Ahmed Yusuf on 22/08/19.
5+
*/
6+
public class AutocompleteData {
7+
int id;
8+
String secondaryId;
9+
String value;
10+
boolean hidden;
11+
12+
public AutocompleteData(int id, String secondaryId, String value) {
13+
this.id = id;
14+
this.secondaryId = secondaryId;
15+
this.value = value;
16+
this.hidden = false;
17+
}
18+
19+
public AutocompleteData(int id, String secondaryId, String value, boolean hidden) {
20+
this.id = id;
21+
this.secondaryId = secondaryId;
22+
this.value = value;
23+
this.hidden = hidden;
24+
}
25+
26+
public int getId() {
27+
return id;
28+
}
29+
30+
public void setId(int id) {
31+
this.id = id;
32+
}
33+
34+
public String getSecondaryId() {
35+
return secondaryId;
36+
}
37+
38+
public void setSecondaryId(String secondaryId) {
39+
this.secondaryId = secondaryId;
40+
}
41+
42+
public String getValue() {
43+
return value;
44+
}
45+
46+
public void setValue(String value) {
47+
this.value = value;
48+
}
49+
50+
public boolean isHidden() {
51+
return hidden;
52+
}
53+
54+
public void setHidden(boolean hidden) {
55+
this.hidden = hidden;
56+
}
57+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.paperplay.myformbuilder.modules;
2+
3+
import android.view.View;
4+
import android.widget.LinearLayout;
5+
6+
import java.util.ArrayList;
7+
8+
/**
9+
* Created by Ahmed Yusuf on 20/05/19.
10+
*/
11+
public interface LayoutBuilder<T> {
12+
T setVerticalMargin(int margin);
13+
T setHorizontalMargin(int margin);
14+
T setViewList(ArrayList<View> viewList);
15+
T setFormLayout(LinearLayout formLayout);
16+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package com.paperplay.myformbuilder.view;
2+
import android.content.Context;
3+
import android.view.View;
4+
import android.widget.LinearLayout;
5+
import com.paperplay.myformbuilder.modules.LayoutBuilder;
6+
7+
import java.util.ArrayList;
8+
9+
/**
10+
* Created by Ahmed Yusuf on 2019-11-04.
11+
*/
12+
public class HorizontalLayout {
13+
14+
public static class Builder implements LayoutBuilder<Builder>, Cloneable{
15+
int horizontal_margin = 0, vertical_margin = 0;
16+
ArrayList<View> viewList;
17+
Context context;
18+
LinearLayout formLayout;
19+
20+
public Builder(Context context) {
21+
this.context = context;
22+
}
23+
24+
@Override
25+
public Builder setVerticalMargin(int margin) {
26+
this.vertical_margin = margin;
27+
return this;
28+
}
29+
30+
@Override
31+
public Builder setHorizontalMargin(int margin) {
32+
this.horizontal_margin = margin;
33+
return this;
34+
}
35+
36+
@Override
37+
public Builder setViewList(ArrayList<View> viewList) {
38+
this.viewList = viewList;
39+
return this;
40+
}
41+
42+
@Override
43+
public Builder setFormLayout(LinearLayout formLayout) {
44+
this.formLayout = formLayout;
45+
return this;
46+
}
47+
48+
public HorizontalLayout create(){
49+
return new HorizontalLayout(this);
50+
}
51+
52+
public Object clone() throws CloneNotSupportedException{
53+
return super.clone();
54+
}
55+
}
56+
57+
private HorizontalLayout(Builder builder){
58+
LinearLayout horizontalLayout = new LinearLayout(builder.context);
59+
horizontalLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
60+
LinearLayout.LayoutParams.WRAP_CONTENT));
61+
horizontalLayout.setOrientation(LinearLayout.HORIZONTAL);
62+
63+
for(int n=0;n<builder.viewList.size();n++){
64+
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
65+
LinearLayout.LayoutParams.MATCH_PARENT,
66+
LinearLayout.LayoutParams.MATCH_PARENT,
67+
1.0f
68+
);
69+
if(n==0 && builder.viewList.size()>1){
70+
layoutParams.setMargins(0, builder.vertical_margin,builder.horizontal_margin, builder.vertical_margin);
71+
}else if(builder.viewList.size()>1){
72+
layoutParams.setMargins(builder.horizontal_margin, builder.vertical_margin, 0, builder.vertical_margin);
73+
}
74+
builder.viewList.get(n).setLayoutParams(layoutParams);
75+
horizontalLayout.addView(builder.viewList.get(n));
76+
}
77+
if(builder.formLayout!=null){
78+
LinearLayout formLayout = builder.formLayout;
79+
formLayout.addView(horizontalLayout);
80+
}
81+
}
82+
}

0 commit comments

Comments
 (0)