简体   繁体   English

片段中的Android对话框

[英]Android Dialog from Fragment

I tried to open dialog by click on LinearLayout in Fragment. 我试图通过单击Fragment中的LinearLayout打开对话框。 Actually I follow this tutorial: https://github.com/codepath/android_guides/wiki/Using-DialogFragment and it works but there is dialogshow in Activity (oncreate). 实际上,我遵循此教程: https : //github.com/codepath/android_guides/wiki/Using-DialogFragment ,它可以工作,但Activity(oncreate)中有dialogshow。 If I try to put it in fragment it doesn't work. 如果我尝试将其片段化,则无法使用。

Dialog.java is: Dialog.java是:

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

and Fragment.java is: Fragment.java是:

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

}

there is error 有错误

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

I wrote that problem is because i use extend Fragment instead FragmentActivity but when check my fragment extend it doesn't work: 我写这个问题是因为我使用了Extend Fragment而不是FragmentActivity,但是当检查我的fragment扩展却无法正常工作:

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

What is the best way to open dialog from fragment? 从片段打开对话框的最佳方法是什么?

use this: 用这个:

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

to access activity context 访问活动上下文

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM