Soru & Cevap

Fragment içindeki action bar ve Listview Sorunu

06.11.2020 - 11:28

Arkadaşlar merhaba öncelikle. Benim iki problemim var.

Birincisi navigation Fragmentler arasında gezinirken üst action bar'da geri işareti oluyor fakat bunun ne bir aksiyonu var ne de kaldırabiliyorum.

Layout Inspectordan baktığımda framelayout/action_bar_contanier/action_bar/AppCompatImageButton şeklinde görünüyor.

Kod olarak herhangi bir ekleme yapmadım. yaptığım işlemler sadece bottom navigation activity'den proje oluşturmak ve ardından boş bir fragment oluşturup mevcut fragmentten bu fragmente geçmek. geçiş öncesi herhangi bir problem yok iken geçtikten sonra fragment başlığının solunda geri ok işareti çıkıyor ve işlevsiz.

 

İkinci problemim ise şu;

public class RequestFriendsFragment extends Fragment {

    private FirebaseAuth firebaseAuth;
    FirebaseUser firebaseUser;
    String otherUid;

    public RequestFriendsFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_request_friends, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        ListView listView = view.findViewById(R.id.requestListview);
        firebaseAuth = FirebaseAuth.getInstance();
        firebaseUser = firebaseAuth.getCurrentUser();
        String userUid = firebaseUser.getUid();
        final FirebaseDatabase database = FirebaseDatabase.getInstance();
        final ArrayList<String> otherName = new ArrayList<>();
        DatabaseReference reference = database.getReference("Arkadaslik_Istek/" + userUid);
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for(DataSnapshot snapshot1:snapshot.getChildren()){
                    otherUid = snapshot1.getKey();
                    System.out.println(otherUid);
                    for (DataSnapshot snapshot2:snapshot1.getChildren()){
                        otherName.add((String) snapshot2.getValue());
                        System.out.println(otherName.get(0));
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

        ArrayAdapter arrayAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, otherName);
        listView.setAdapter(arrayAdapter);
    }
}

 Bu ekranda yapmak istediğim realtime database'den uid'yi ve bu uide altında bulunan verileri String otherUid ve ArrayList otherName içine yazdırmak. System.out.println yaptırdığımda da verileri logcat'te görebiliyorum fakat veriler listView'da görünmüyor.

0 Görüntülenme

6 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user .tire.
.tire.
07.11.2020 - 03:38
yada true değeri verip @Override public boolean onSupportNavigateUp() { Toast.makeText(MainActivityList.this,"Geri",Toast.LENGTH_LONG).show(); // TODO: Implement this method return super.onSupportNavigateUp(); } bu metodun içine intent yazıp gideceğin sınıfı yaz yöntem çok
ibrahimylmz45
07.11.2020 - 03:41
Fragmentlerle çalıştığım için intent metodu fragmentler arası geçişte kullanamıyorum.
ibrahimylmz45
07.11.2020 - 03:41
Ama teşekkür ederim. sorunu hallettim. Çözüm yorumlarda var.
Profile picture for user ibrahimylmz45
ibrahimylmz45
07.11.2020 - 03:36

Çözüldü...

1. sorun

 

MainActivity içerisinde onCreate içine;

getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
                @Override
                public void onBackStackChanged() {
                    int stackHeight = getSupportFragmentManager().getBackStackEntryCount();
                    if (stackHeight > 0) { // if we have something on the stack (doesn't include the current shown fragment)
                        getSupportActionBar().setHomeButtonEnabled(true);
                        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                    } else {
                        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                        getSupportActionBar().setHomeButtonEnabled(false);
                    }
                }

            });

ve Main Activity de

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                super.onBackPressed();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

 

2. sorunu listview'ı kaldırıp recyclerview ve adapter ile çözümledim. Ayrıca her for döngüsünden sonra  

requestRecyclerAdapter.notifyDataSetChanged();

ile güncelleme yaptım.

Profile picture for user .tire.
.tire.
07.11.2020 - 03:16
getSupportActionBar().setDisplayHomeAsUpEnabled(true); false değeri ver bakim
ibrahimylmz45
07.11.2020 - 03:32
Bu yöntem o butonun özelliğini devre dışı bırakmaz mı benim istediğim ya işlevsellik kazandırmak ya da butonu yok etmek.
Profile picture for user .tire.
.tire.
07.11.2020 - 02:35
bunuda manifest içindeki activity ye tanimiyorsun
/sites/default/files/cevaplar/dosya/2020/file-screenshot_2020-11-07-14-34-32.png
Profile picture for user .tire.
.tire.
07.11.2020 - 02:29
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class Activity2 extends AppCompatActivity { private Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_2); getSupportActionBar().setTitle("Activity 2"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); button2 = (Button) findViewById(R.id.button2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {
Profile picture for user .tire.
.tire.
07.11.2020 - 01:09
getSupportActionBar().hide();
ibrahimylmz45
07.11.2020 - 03:37
Bu kod acttionBar'ı komple kapatıyor.