/SearchViewDialog

Dialog Search Single or Multi item Selection

Primary LanguageJava

SearchViewDialog - Easy Drop Down


Simple way to select Item Single or Multi


Content List


Download

Add maven jitpack.io and dependencies in build.gradle (Project) :

// build.gradle project
allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}

// build.gradle app/module
dependencies {
  ...
  implementation 'com.github.gzeinnumer:SearchViewDialog:version'
  implementation 'com.github.gzeinnumer:SimpleMaterialStyle:2.0.0'
  implementation 'com.google.android.material:material:1.2.1'
}

Feature List


Tech stack and 3rd library

  • Material.io (docs)
  • Multi and Single Selection in Recyclerview (docs) (example)
  • DialogFragment (docs)

Usage

First Step. Use MaterialComponents in your style :

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- Customize your theme here. -->
</style>

If you want to change default font, add custom_font.ttf to your res directory res->font. Than add this style to your style.xml/themes.xml

<!-- Base application theme. -->
<!-- Change Base Font -->
<style name="Theme.MyLibsTesting" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <item name="android:fontFamily">@font/test_font</item>
</style>

<!-- Change TextView Font -->
<style name="BaseTextView">
    <item name="android:fontFamily">@font/test_font</item>
</style>

<style name="BaseTextView.Bold" parent="BaseTextView">
    <item name="android:fontFamily">@font/test_font</item>
</style>

<style name="BaseTextView.Italic" parent="BaseTextView">
    <item name="android:fontFamily">@font/test_font</item>
</style>

<style name="BaseTextView.Bold.Italic" parent="BaseTextView">
    <item name="android:fontFamily">@font/test_font</item>
</style>

<!-- Change Button Font -->
<style name="MyButtonText" parent="Widget.MaterialComponents.Button.TextButton">
    <item name="android:fontFamily">@font/test_font</item>
</style>

<style name="MyButtonOutlined" parent="Widget.MaterialComponents.Button.OutlinedButton">
    <item name="android:fontFamily">@font/test_font</item>
</style>

<style name="MyButtonContained">
    <item name="android:fontFamily">@font/test_font</item>
</style>

<style name="MyButtonIcon" parent="Widget.MaterialComponents.Button.Icon">
    <item name="android:fontFamily">@font/test_font</item>
</style>

If you want to change default color, add value to res/color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#6200EE</color>
    <color name="colorPrimaryDark">#3700B3</color>
    <color name="colorAccent">#03DAC5</color>
</resources>

SearchViewDialog

Dialog with 1 Title, 1 Content, 1 EditText, 1 RecyclerView, 1 Negative Button, 1 Positive Button. You can choise Single Item Select or Multi Item Select. The difference is only in callback function.

  • Content Item there is 3 types data that you can sent to this dialog.

Type 1

String[] arrayString = {"M", "Fadli", "Zein"};
new SearchViewDialog<String>(getSupportFragmentManager())
        .setItems(arrayString);

Type 2

ArrayList<String> listString = new ArrayList<>();
listString.add("Lorem ipsum dolor");
new SearchViewDialog<String>(getSupportFragmentManager())
        .setItems(listString);

Type 3 for this type you should override function toString() in your model pojo

public class ExampleModel {

    private int id;
    private String name;
    private String address;

    //constructor

    //getter
    //setter

    @Override
    public String toString() {
        return "ExampleModel{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

And dont forget to declare your model pojo after SearchViewDialog<ModelPojo>

ArrayList<ExampleModel> listObject = new ArrayList<>();
listObject.add(new ExampleModel(1, "Zein", "Balbar"));

new SearchViewDialog<ExampleModel>(getSupportFragmentManager())
        .setItems(listObject);

use your model pojo to callBack function. Example new SearchViewDialog.OnOkPressedSingle<ExampleModel>(){} or new SearchViewDialog.OnOkPressedMulti<ExampleModel>(){}

//For Single
new SearchViewDialog<ExampleModel>(getSupportFragmentManager())
    .setItems(listObject)
    .onOkPressedCallBackSingle(...);

//For Multi
new SearchViewDialog<ExampleModel>(getSupportFragmentManager())
    .setItems(listObject)
    .onOkPressedCallBackMulti(...);

  • Single Item Select. Use onOkPressedCallBackSingle to enable Single Select Item. Code :
ArrayList<String> list = new ArrayList<>();
list.add("Lorem ipsum dolor");
list.add("sit amet, consectetur");
list.add("adipiscing elit sed do");

new SearchViewDialog<String>(getSupportFragmentManager())
    .setItems(list)
    .setTitle("ini title")
    .setContent("ini content")
    .onOkPressedCallBackSingle(new SearchViewDialog.OnOkPressedSingle<String>() {
        @Override
        public void onOkSingle(String data) {
            String temp = "Single Select : \n"+data.toString();
            tv.setText(temp);
        }
    })
    .onCancelPressedCallBack(new SearchViewDialog.OnCancelPressed() {
        @Override
        public void onCancelPressed() {
            Toast.makeText(MainActivity.this, "Cancel", Toast.LENGTH_SHORT).show();
        }
    })
    .show();

  • Multi Item Select. Use onOkPressedCallBackMulti to enable Multi Select Item. Code :
ArrayList<String> list = new ArrayList<>();
list.add("Lorem ipsum dolor");
list.add("sit amet, consectetur");
list.add("adipiscing elit sed do");

new SearchViewDialog<String>(getSupportFragmentManager())
    .setItems(list)
    .setTitle("ini title")
    .setContent("ini content")
    .onOkPressedCallBackMulti(new SearchViewDialog.OnOkPressedMulti<String>() {
        @Override
        public void onOkMulti(List<String> data) {
            String temp = "Multi Select :\n";
            temp = temp + "Total Data => "+data.size()+"\n\n";
            for (String d: data){
                temp = temp + "Value => "+ d +"\n";
            }
            tv.setText(temp);
        }
    })
    .onCancelPressedCallBack(new SearchViewDialog.OnCancelPressed() {
        @Override
        public void onCancelPressed() {
            Toast.makeText(MainActivity.this, "Cancel", Toast.LENGTH_SHORT).show();
        }
    })
    .show();

or you can write code like this :

SearchViewDialog dialog = new SearchViewDialog<String>(getSupportFragmentManager())
    .setItems(list)
    .setTitle("ini title")
    .setContent("ini content");

dialog.onOkPressedCallBackMulti(new SearchViewDialog.OnOkPressedMulti<String>(){
    @Override
    public void onOkMulti(List<String> data) {

    }
}).

dialog.onCancelPressedCallBack(new SearchViewDialog.OnCancelPressed<String>() {
    @Override
    public void onCancelPressed() {
        Toast.makeText(MainActivity.this, "Cancel", Toast.LENGTH_SHORT).show();
    }
});

dialog.show();

Preview :

Single Select Item Preview, you only can select 1 Item Click OK and call function onOkPressedCallBackSingle Fiture Filter will enable on Single Select or Multi Select
Multi Select Item Preview, you can select more than 1 Item Click OK and call function onOkPressedCallBackMulti

SearchViewDialog -> Customize

You can Customize your dialog UI. ReadMore.


Example Code/App

FullCode MainActivity

Sample Code And App


Version

  • 2.0.3
    • First Release
  • 2.0.4
    • Add animation and set custom animation show
  • 2.0.5
    • Bug Fixing
  • 2.0.6
    • Color
  • 2.0.8
    • Bug Fixing
  • 2.0.9
    • Bug Fixing
  • 2.1.0
    • Bug Fixing Color
  • 2.1.1
    • Bug Fixing Color
  • 3.0.0
    • Support SDK 16

Contribution

You can sent your constibution to branch open-pull.


Copyright 2020 M. Fadli Zein