有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android打开对话框

我想通过点击LinearLayout(id:colorsdialogbtn)从Fragment(TrainerMenu)打开对话框(SettingsFolorDialog),但实际上一触就打开了两个对话框(相同)。我不知道怎么了,因为我只使用了一次“showEditDialog”

设置颜色对话框:

package com.hgyghyfghyu.apkana40;

import 安卓.content.Context;
import 安卓.content.SharedPreferences;
import 安卓.os.Bundle;
import 安卓.support.annotation.Nullable;
import 安卓.support.v4.app.DialogFragment;
import 安卓.view.LayoutInflater;
import 安卓.view.MotionEvent;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.view.WindowManager;
import 安卓.widget.EditText;
import 安卓.widget.LinearLayout;

import static com.hgyghyfghyu.apkana40.AppData.FCOLOR_KEY;
import static com.hgyghyfghyu.apkana40.AppData.editordata;
import static com.hgyghyfghyu.apkana40.AppData.prefdata;
// ...

public class SettingsFColorDialod extends DialogFragment {


    public SettingsFColorDialod() {
    }

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

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

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

        LinearLayout firstcolor = (LinearLayout) view.findViewById(R.id.FIRSTCOLOR);
        LinearLayout secondcolor = (LinearLayout) view.findViewById(R.id.SECONDCOLOR);
        prefdata = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
        editordata = prefdata.edit();

        firstcolor.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                editordata.putString(FCOLOR_KEY,"33777F").apply();
                dismiss();
                return true;
            }
        });

        secondcolor.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return true;
            }
        });

        String title = getArguments().getString("Choose your color", "Choose your color");
        getDialog().setTitle(title);
        getDialog().getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    }


}

培训菜单:

package com.hgyghyfghyu.apkana40;


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

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


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.colorsdialogbtn);
        btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                showEditDialog();
                return true;
            }
        });

    }
    private void showEditDialog() {
        安卓.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager();
        SettingsFColorDialod settingsFColorDialod = SettingsFColorDialod.newInstance("Some Title");
        settingsFColorDialod.show(fm, "SettingsFColorDialog");
    }

}

有什么不对劲吗


共 (1) 个答案

  1. # 1 楼答案

    你需要使用setOnClickListner来监听点击,而不是setOnTouchListener,这在触摸时会被触发很多次