DialogAlchemy
This is a dialog utility library. It provides a easy way to let developers deal with screen rotation issue.
Installation
repositories {
...
maven {
url "https://jitpack.io"
}
}
dependencies {
...
compile 'com.github.NeoLSN:DialogAlchemy:1.1.3'
}
API
- Alchemist - Dialog fragment
- Material - Basic dialog model for most of Android Dialog library
- PhilosopherStone - There are two purpose for Philosopher Stone
- A interface for custom view (main purpose)
- Expand the Dialog library ability that Material didn't support
- TransmutationCircle - A interface for dialog creation factory. There are 2 notices.
- Should satisfy Material model requirement
- At least process PhilosopherStone as a custom view
- DialogAlchemy - A utility class to show a dialog
Usage
Basic Usage
Material material = new Material.Builder(getActivity())
.setTitle("Dialog Title")
.setMessage("Dialog message")
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
... Do something ...
}
}
)
.setNegativeButton(android.R.string.cancel, null)
.build();
Alchemist alchemist = DialogAlchemy.show(getFragmentManager(), material);
Advanced Usage
//Create a custom view
PhilosopherStone stone = new EditTextStone.Builder()
.setText(...)
.setOnTextAcceptedListener(listener)
.build();
Material material = new Material.Builder(getActivity())
.setTitle("Dialog Title")
.setMessage("Dialog message")
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
... Do something ...
}
}
)
.setNegativeButton(android.R.string.cancel, null)
.setPhilosopherStone(stone) // incre
.build();
Alchemist alchemist = DialogAlchemy.show(getFragmentManager(), material);
Reset listener or callback
When DialogAlchemy.show()
called, it will set a tag to Alchemist
automatically. You can use this tag to find this fragment after screen rotated.
For Activity
private Alchemist alchemist;
@Override
public void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
String tag = savedInstanceState.getString(TAG_KEY);
alchemist = (Alchemist) getSupportFragmentManager().findFragmentByTag(tag);
Material material = alchemist.getMaterial();
Material.Builder builder = material.rebuild(this);
// reset listener or callback in here
Material newMaterial = builder.build();
alchemist.setMaterial(newMaterial);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString(TAG_KEY, alchemist.getTag());
super.onSaveInstanceState(outState);
}
For fragment
private Alchemist alchemist;
public void onViewCreated(View view, Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
String tag = savedInstanceState.getString(TAG_KEY);
alchemist = (Alchemist) getFragmentManager().findFragmentByTag(tag);
Material material = alchemist.getMaterial();
Material.Builder builder = material.rebuild(this);
// reset listener or callback in here
Material newMaterial = builder.build();
alchemist.setMaterial(newMaterial);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString(TAG_KEY, alchemist.getTag());
super.onSaveInstanceState(outState);
}
Set default TransmutationCircle
public class DemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
...
DialogAlchemy.setDefaultCircle(new MetalTransmutationCircle());
}
}
License
Copyright (C) 2016 Jason Yang Copyright (C) 2007 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.