komunikasi dari fragment ke fragment
package dev .malikkurosaki .gombalinkita .Dialog ;
import android .app .Activity ;
import android .content .Context ;
import android .os .AsyncTask ;
import android .os .Bundle ;
import android .os .Handler ;
import android .view .LayoutInflater ;
import android .view .View ;
import android .view .ViewGroup ;
import android .widget .TextView ;
import android .widget .Toast ;
import java .util .ArrayList ;
import java .util .List ;
import androidx .annotation .NonNull ;
import androidx .annotation .Nullable ;
import androidx .cardview .widget .CardView ;
import androidx .fragment .app .DialogFragment ;
import androidx .recyclerview .widget .GridLayoutManager ;
import androidx .recyclerview .widget .RecyclerView ;
import butterknife .BindView ;
import butterknife .ButterKnife ;
import dev .malikkurosaki .gombalinkita .Adapter .AdapterPilihSuara ;
import dev .malikkurosaki .gombalinkita .Database .TabelPilihSuara ;
import dev .malikkurosaki .gombalinkita .Database .TheDatabase ;
import dev .malikkurosaki .gombalinkita .R ;
public class DialogPilihSuara extends DialogFragment {
@ BindView (R .id .containerPilihSuara )
RecyclerView containerPilihSuara ;
private Context context ;
private Activity activity ;
private TheDatabase database ;
private KetikaSuaraTelahDipilih ketikaSuaraTelahDipilih ;
public DialogPilihSuara () {
}
public DialogPilihSuara newInstance () {
DialogPilihSuara pilihSuara = new DialogPilihSuara ();
return pilihSuara ;
}
@ Override
public void onAttach (Context context ) {
super .onAttach (context );
this .context = context ;
this .activity = (Activity ) context ;
if (context instanceof KetikaSuaraTelahDipilih ){
ketikaSuaraTelahDipilih = (KetikaSuaraTelahDipilih )context ;
}else {
try {
throw new IllegalAccessException ("implementasi dulu" );
}catch (IllegalAccessException e ){
e .printStackTrace ();
}
}
}
@ Nullable
@ Override
public View onCreateView (@ NonNull LayoutInflater inflater , @ Nullable ViewGroup container , @ Nullable Bundle savedInstanceState ) {
View view = inflater .inflate (R .layout .dialog_pilih_suara , container , false );
ButterKnife .bind (this , view );
return view ;
}
@ Override
public void onViewCreated (@ NonNull View view , @ Nullable Bundle savedInstanceState ) {
super .onViewCreated (view , savedInstanceState );
database = TheDatabase .getInstance (context );
init ();
}
private void init () {
List <TabelPilihSuara > list = new ArrayList <>();
list .add (new TabelPilihSuara ("suara 1" ,0.5f ,1f ));
list .add (new TabelPilihSuara ("suara 2" ,1f ,1f ));
list .add (new TabelPilihSuara ("suara 3" ,1.5f ,1f ));
list .add (new TabelPilihSuara ("suara 4" ,2f ,1f ));
list .add (new TabelPilihSuara ("suara 5" ,2.5f ,1f ));
list .add (new TabelPilihSuara ("suara 6" ,3f ,1f ));
list .add (new TabelPilihSuara ("suara 7" ,1f ,0.5f ));
list .add (new TabelPilihSuara ("suara 8" ,1f ,1f ));
list .add (new TabelPilihSuara ("suara 9" ,1f ,1.5f ));
list .add (new TabelPilihSuara ("suara 10" ,1f ,2f ));
list .add (new TabelPilihSuara ("suara 11" ,1f ,2.5f ));
list .add (new TabelPilihSuara ("suara 12" ,1f ,3f ));
list .add (new TabelPilihSuara ("suara 13" ,0.5f ,0.5f ));
list .add (new TabelPilihSuara ("suara 14" ,2f ,2f ));
list .add (new TabelPilihSuara ("suara 15" ,3f ,3f ));
AdapterPilihSuara adapterPilihSuara = new AdapterPilihSuara (context ,list );
containerPilihSuara .setLayoutManager (new GridLayoutManager (context ,3 ));
containerPilihSuara .setAdapter (adapterPilihSuara );
adapterPilihSuara .notifyDataSetChanged ();
adapterPilihSuara .setKetikaTombolPilihSuaraDiClick (new AdapterPilihSuara .KetikaTombolPilihSuaraDiClick () {
@ Override
public void maka (View view , int posisi ) {
TabelPilihSuara pilihSuara = adapterPilihSuara .mendapatkanSuara (posisi );
AsyncTask .execute (()->{
long idNya = database .dbNya ().mendapatkanIdNya ();
database .dbNya ().masukkanDataKeTabelPilihanSuara (pilihSuara );
long idNya2 = database .dbNya ().mendapatkanIdNya ();
TabelPilihSuara suara = database .dbNya ().mendapatkanSuara ();
activity .runOnUiThread (()->{
if (idNya == idNya2 ){
ketikaSuaraTelahDipilih .suaranyaAdalah (suara );
}
});
});
containerPilihSuara .post (()->{
View vi = containerPilihSuara .findViewHolderForPosition (posisi ).itemView ;
CardView cardView = vi .findViewById (R .id .wadahPilihSuara );
for (int i =0 ;i <adapterPilihSuara .getItemCount ();i ++){
View vi2 = containerPilihSuara .findViewHolderForPosition (i ).itemView ;
CardView cv = vi2 .findViewById (R .id .wadahPilihSuara );
cv .setCardBackgroundColor (getResources ().getColor (R .color .color1 ));
}
cardView .setCardBackgroundColor (getResources ().getColor (R .color .color3 ));
});
}
});
}
@ Override
public void onDetach () {
super .onDetach ();
//activity.recreate();
}
public void setKetikaSuaraTelahDipilih (KetikaSuaraTelahDipilih ketikaSuaraTelahDipilih ) {
this .ketikaSuaraTelahDipilih = ketikaSuaraTelahDipilih ;
}
public interface KetikaSuaraTelahDipilih {
void suaranyaAdalah (TabelPilihSuara pilihSuara );
}
}
package dev .malikkurosaki .gombalinkita ;
import android .app .Activity ;
import android .content .Context ;
import android .os .AsyncTask ;
import android .os .Bundle ;
import android .os .Handler ;
import android .speech .tts .TextToSpeech ;
import android .util .Log ;
import android .view .View ;
import android .widget .FrameLayout ;
import android .widget .ProgressBar ;
import android .widget .TextView ;
import android .widget .Toast ;
import com .google .firebase .database .DataSnapshot ;
import com .google .firebase .database .DatabaseError ;
import com .google .firebase .database .DatabaseReference ;
import com .google .firebase .database .FirebaseDatabase ;
import com .google .firebase .database .ValueEventListener ;
import com .mapzen .speakerbox .Speakerbox ;
import java .util .ArrayList ;
import java .util .Collections ;
import java .util .List ;
import java .util .Locale ;
import androidx .annotation .NonNull ;
import androidx .appcompat .app .AppCompatActivity ;
import androidx .fragment .app .Fragment ;
import butterknife .BindView ;
import butterknife .ButterKnife ;
import dev .malikkurosaki .gombalinkita .Database .TabelPilihSuara ;
import dev .malikkurosaki .gombalinkita .Database .TabelUtama ;
import dev .malikkurosaki .gombalinkita .Database .TheDatabase ;
import dev .malikkurosaki .gombalinkita .Dialog .DialogPilihSuara ;
import dev .malikkurosaki .gombalinkita .FragmentNya .UtamaFragment ;
import dev .malikkurosaki .gombalinkita .Pembantu .Pembantu ;
public class MainActivity extends AppCompatActivity implements DialogPilihSuara .KetikaSuaraTelahDipilih , UtamaFragment .KetikaMenyentuhUtamaFragment {
@ BindView (R .id .containerMain )
FrameLayout containerMain ;
@ BindView (R .id .loading )
ProgressBar loading ;
private Speakerbox speakerbox ;
private TextToSpeech tts ;
private String TAG = "tagnya" ;
private TheDatabase database ;
private DatabaseReference ref ;
private Activity activity ;
private Context context ;
@ Override
protected void onCreate (Bundle savedInstanceState ) {
super .onCreate (savedInstanceState );
setContentView (R .layout .activity_main );
ButterKnife .bind (this );
database = TheDatabase .getInstance (this );
ref = FirebaseDatabase .getInstance ().getReference ();
activity = this ;
context = this ;
// mulai utama fragment
ref .child ("content/data" ).addListenerForSingleValueEvent (new ValueEventListener () {
@ Override
public void onDataChange (@ NonNull DataSnapshot dataSnapshot ) {
List <TabelUtama > lemari = new ArrayList <>();
for (DataSnapshot snapshot : dataSnapshot .getChildren ()) {
TabelUtama utama = snapshot .getValue (TabelUtama .class );
lemari .add (utama );
}
AsyncTask .execute (() -> {
int ukuranLama = database .dbNya ().dapatkanSemuaDariTabelUtama ().size ();
// cek jika ada data baru
if (lemari .size () > ukuranLama ){
activity .runOnUiThread (()->{
Toast .makeText (getApplication (),"update date" ,Toast .LENGTH_LONG ).show ();
});
database .dbNya ().hapusSumuaDariTabelUtama ();
int ukuranBaru = database .dbNya ().dapatkanSemuaDariTabelUtama ().size ();
if (ukuranBaru == 0 ){
for (TabelUtama utama : lemari ){
database .dbNya ().masukkanDataKeTabelUtama (utama );
}
int ukuranBaru2 = database .dbNya ().dapatkanSemuaDariTabelUtama ().size ();
if (lemari .size () == ukuranBaru2 ){
keLayoutUtama ();
}else {
Log .i (TAG , "onDataChange: gak sama 2" +ukuranBaru2 );
}
}else {
Log .i (TAG , "onDataChange: ga sama1" +ukuranLama +" " +ukuranBaru );
}
}else {
keLayoutUtama ();
}
});
//Collections.shuffle(lemari);
}
@ Override
public void onCancelled (@ NonNull DatabaseError databaseError ) {
keLayoutUtama ();
}
});
new Handler ().postDelayed (() -> AsyncTask .execute (()->{
int berapa = database .dbNya ().dapatkanSemuaDariTabelUtama ().size ();
activity .runOnUiThread (()->{
if (berapa !=0 ){
keLayoutUtama ();
}
});
}),5000 );
}
void keLayoutUtama (){
new Handler (getMainLooper ()).postDelayed (new Runnable () {
@ Override
public void run () {
loading .setVisibility (View .GONE );
getSupportFragmentManager ().beginTransaction ().replace (containerMain .getId (), new UtamaFragment ()).commitAllowingStateLoss ();
}
}, 2000 );
}
@ Override
protected void onDestroy () {
if (tts != null ) {
tts .stop ();
tts .shutdown ();
}
super .onDestroy ();
}
@ Override
public void suaranyaAdalah (TabelPilihSuara pilihSuara ) {
tx .setText (pilihSuara .getNama ());
pm .getTts ().setSpeechRate (pilihSuara .getSpeed ());
pm .getTts ().setPitch (pilihSuara .getPitch ());
}
Pembantu pm ;
TextView tx ;
@ Override
public void utamaFragment (TextView textView , Pembantu pembantu ) {
pm = pembantu ;
tx = textView ;
}
}
package dev .malikkurosaki .gombalinkita .FragmentNya ;
import android .app .Activity ;
import android .content .Context ;
import android .os .AsyncTask ;
import android .os .Bundle ;
import android .speech .tts .TextToSpeech ;
import android .util .Log ;
import android .view .LayoutInflater ;
import android .view .View ;
import android .view .ViewGroup ;
import android .widget .TextView ;
import android .widget .Toast ;
import com .google .firebase .database .DataSnapshot ;
import com .google .firebase .database .DatabaseError ;
import com .google .firebase .database .DatabaseReference ;
import com .google .firebase .database .FirebaseDatabase ;
import com .google .firebase .database .ValueEventListener ;
import java .util .Collections ;
import java .util .List ;
import java .util .Locale ;
import androidx .annotation .NonNull ;
import androidx .annotation .Nullable ;
import androidx .fragment .app .Fragment ;
import androidx .recyclerview .widget .LinearLayoutManager ;
import androidx .recyclerview .widget .RecyclerView ;
import butterknife .BindView ;
import butterknife .ButterKnife ;
import dev .malikkurosaki .gombalinkita .Adapter .AdapterUtama ;
import dev .malikkurosaki .gombalinkita .Database .TabelPilihSuara ;
import dev .malikkurosaki .gombalinkita .Database .TabelUtama ;
import dev .malikkurosaki .gombalinkita .Database .TheDatabase ;
import dev .malikkurosaki .gombalinkita .Dialog .DialogPilihSuara ;
import dev .malikkurosaki .gombalinkita .MasukkanData ;
import dev .malikkurosaki .gombalinkita .Pembantu .Pembantu ;
import dev .malikkurosaki .gombalinkita .R ;
public class UtamaFragment extends Fragment {
@ BindView (R .id .containerUtama )
RecyclerView containerUtama ;
@ BindView (R .id .judulNya )
TextView judulNya ;
@ BindView (R .id .tombolAcak )
TextView tombolAcak ;
@ BindView (R .id .tombolInfo )
TextView tombolInfo ;
@ BindView (R .id .tombolDeveloper )
TextView tombolDeveloper ;
@ BindView (R .id .tombolPilihSuara )
TextView tombolPilihSuara ;
private Context context ;
private Activity activity ;
private String TAG = "tagnya" ;
private TheDatabase theDatabase ;
private DatabaseReference ref ;
private Pembantu pembantu ;
private KetikaMenyentuhUtamaFragment ketikaMenyentuhUtamaFragment ;
public UtamaFragment () {
}
public UtamaFragment newInstance () {
UtamaFragment utamaFragment = new UtamaFragment ();
return utamaFragment ;
}
@ Override
public void onAttach (Context context ) {
super .onAttach (context );
this .context = context ;
this .activity = (Activity ) context ;
if (context instanceof KetikaMenyentuhUtamaFragment ){
ketikaMenyentuhUtamaFragment = (KetikaMenyentuhUtamaFragment )context ;
}else {
try {
throw new IllegalAccessException ("harus implement" );
}catch (IllegalAccessException e ){
e .printStackTrace ();
}
}
}
@ Nullable
@ Override
public View onCreateView (@ NonNull LayoutInflater inflater , @ Nullable ViewGroup container , @ Nullable Bundle savedInstanceState ) {
View view = inflater .inflate (R .layout .fragment_utama , container , false );
ButterKnife .bind (this , view );
return view ;
}
@ Override
public void onViewCreated (@ NonNull View view , @ Nullable Bundle savedInstanceState ) {
super .onViewCreated (view , savedInstanceState );
theDatabase = TheDatabase .getInstance (context );
ref = FirebaseDatabase .getInstance ().getReference ();
pembantu = new Pembantu (context );
init ();
percobaan ();
bisaEdit ();
}
private void init () {
ketikaMenyentuhUtamaFragment .utamaFragment (tombolPilihSuara ,pembantu );
AsyncTask .execute (()->{
int berapa = theDatabase .dbNya ().jumblahNya ();
TabelPilihSuara suaraNya = theDatabase .dbNya ().mendapatkanSuara ();
if (berapa ==0 ){
theDatabase .dbNya ().masukkanDataKeTabelPilihanSuara (new TabelPilihSuara (1 ,"suara 1" ,1f ,1f ));
int berapa2 = theDatabase .dbNya ().jumblahNya ();
TabelPilihSuara suara = theDatabase .dbNya ().mendapatkanSuara ();
if (berapa2 !=0 ){
activity .runOnUiThread (()->{
Toast .makeText (getContext (),"loading suara" ,Toast .LENGTH_LONG ).show ();
pembantu .getTts ().setPitch (suara .getPitch ());
pembantu .getTts ().setSpeechRate (suara .getSpeed ());
});
}
}else {
activity .runOnUiThread (()->{
tombolPilihSuara .setText (suaraNya .getNama ());
});
}
});
tombolInfo .setOnClickListener (v -> {
Pembantu .ngePop (context , getString (R .string .infoNya ), v );
});
tombolDeveloper .setOnClickListener (v -> {
Pembantu .ngePop (context , getString (R .string .developer ), v );
});
tombolPilihSuara .setOnClickListener (new View .OnClickListener () {
@ Override
public void onClick (View view ) {
new DialogPilihSuara ().show (getChildFragmentManager (),"pilih_suara" );
}
});
}
private void percobaan () {
AsyncTask .execute (() -> {
List <TabelUtama > lemari = theDatabase .dbNya ().dapatkanSemuaDariTabelUtama ();
activity .runOnUiThread (() -> {
AdapterUtama ad = new AdapterUtama (context , lemari );
containerUtama .setLayoutManager (new LinearLayoutManager (context ));
containerUtama .setAdapter (ad );
ad .notifyDataSetChanged ();
tombolAcak .setOnClickListener (v -> {
Collections .shuffle (lemari );
ad .notifyDataSetChanged ();
});
ad .setKetikaTombolPlayDiKlick (new AdapterUtama .KetikaTombolPlayDiKlick () {
@ Override
public void maka (View view , int position ) {
pembantu .bicara (lemari .get (position ).getIsi ());
}
});
});
});
}
private void bisaEdit () {
ref .child ("data/setting/edit" ).addListenerForSingleValueEvent (new ValueEventListener () {
@ Override
public void onDataChange (@ NonNull DataSnapshot dataSnapshot ) {
boolean boleh = dataSnapshot .getValue (Boolean .class );
if (boleh ) {
judulNya .setOnLongClickListener (v -> {
new MasukkanData ().show (getChildFragmentManager (), "input" );
return true ;
});
}
}
@ Override
public void onCancelled (@ NonNull DatabaseError databaseError ) {
}
});
}
public void setKetikaMenyentuhUtamaFragment (KetikaMenyentuhUtamaFragment ketikaMenyentuhUtamaFragment ) {
this .ketikaMenyentuhUtamaFragment = ketikaMenyentuhUtamaFragment ;
}
public interface KetikaMenyentuhUtamaFragment {
void utamaFragment (TextView textView ,Pembantu pembantu );
}
}