Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save malikkurosaki/bc3a485dd51e9caff0696b523b2e85c9 to your computer and use it in GitHub Desktop.
Save malikkurosaki/bc3a485dd51e9caff0696b523b2e85c9 to your computer and use it in GitHub Desktop.
komunikasi dari fragment ke fragmen

komunikasi dari fragment ke fragment

dari dialog 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);
    }
}

ke main activity

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;
    }
}

ke utama fragment

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);
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment