2016-03-30 16 views
0

Fragment'da LinearLayout'a tıklayarak diyaloğu açmaya çalıştım. Aslında bu eğiticiyi takip ediyorum: https://github.com/codepath/android_guides/wiki/Using-DialogFragment ve bununla birlikte, Etkinlik'te (oncreate) diyalog gösterisi var. Eğer onu parçalara ayırmaya çalışırsam işe yaramıyor.Fragmandan Android Dialog

package com.hgyghyfghyu.apkana40; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.DialogFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.WindowManager; 
import android.widget.EditText; 
// ... 

public class EditNameDialog extends DialogFragment { 

    private EditText mEditText; 

    public EditNameDialog() { 
    } 

    public static EditNameDialog newInstance(String title) { 
     EditNameDialog frag = new EditNameDialog(); 
     Bundle args = new Bundle(); 
     args.putString("title", title); 
     frag.setArguments(args); 
     return frag; 
    } 

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

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     mEditText = (EditText) view.findViewById(R.id.txt_your_name); 
     String title = getArguments().getString("title", "Enter Name"); 
     getDialog().setTitle(title); 
     mEditText.requestFocus(); 
     getDialog().getWindow().setSoftInputMode(
       WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
    } 
} 

ve Fragment.java geçerli::

Dialog.java olduğunu

package com.hgyghyfghyu.apkana40; 


import android.content.Context; 
import android.content.SharedPreferences; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
//import android.support.v4.app.FragmentManager; 
import android.support.v4.app.DialogFragment; 
import android.support.v4.app.FragmentManager; 
import android.view.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 

import static com.hgyghyfghyu.apkana40.AppData.FCOLOR_KEY; 
import static com.hgyghyfghyu.apkana40.AppData.TRANSP_KEY; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class TrainerMenu extends Fragment { 


    public TrainerMenu() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     SharedPreferences pref = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 

     View v = inflater.inflate(R.layout.fragment_trainer_menu, container, false); 
     v.findViewById(R.id.trainermenuadbtn).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "33777F"))); 
     v.findViewById(R.id.trainermenutrainersbtn).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "33777F"))); 
     v.findViewById(R.id.trainermenusettingsbtn).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "5556FF"))); 
     v.findViewById(R.id.trainermenuinfobtn).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "5556FF"))); 
     v.findViewById(R.id.trainermenugroupsbtn).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "5556FF"))); 


     return v; 
    } 

    public void onViewCreated (View view, Bundle savedInstanceState) { 
     LinearLayout btn = (LinearLayout) view.findViewById(R.id.pomocniczy); 
     btn.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       //DialogFragment dialog = new DialogFragment(getActivity()); 
       showEditDialog(); 
       return true; 
      } 
     }); 

    } 
    private void showEditDialog() { 
     android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); 
     EditNameDialog editNameDialog = EditNameDialog.newInstance("Some Title"); 
     editNameDialog.show(fm, "fragment_edit_name"); 
    } 

} 

Ben bu sorunu yazdım hata

Error:(63, 53) error: cannot find symbol method getSupportFragmentManager() 

orada olduğunu ben yerine Fragment uzatmak kullandığından FragmentActivity ancak parçamı kontrol ettiğimde uzatmıyor, çalışmaz:

SharedPreferences pref = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 

Diyalog penceresinden açmanın en iyi yolu nedir?

cevap

1

kullanımı bu:

android.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager(); 

aktivite bağlamı

+0

erişmek Ya da sadece() getFragmentManager aramak için. –

+0

evet docs getFragmentManager() 'a göre FragmentManager'ı bu parçanın etkinliğiyle ilişkili parçalarla etkileşimde bulunmaya döndürün. Parçanın bir FragmentTransaction'a işlenene ve etkinliğine eklenene kadar yerleştirildiği süre boyunca, bunun getActivity() 'den biraz önce null olmayacağını unutmayın. Bu Fragment başka bir Parçanın alt öğesi ise, burada döndürülen FragmentManager, ebeveyn getChildFragmentManager() olacaktır. –

+0

Bu yüzden iletişim kutusundaki birkaç düğme vardır, her birinin değeri vardır (1-10), bu sayıyı fragment.java cinsinden int değerine ayarlamak mümkün mü (kimse tek bir tuşa tıkladığında iletişim kutusu kapatılmalıdır)? – littlewombat