简体   繁体   English

单击图像时不显示对话框片段

[英]Dialog Fragment does not appear when image is clicked

I (think) I have configured my code such that when an Image is clicked, then it opens a Dialog with some information. 我(认为)我已经配置了代码,以便当单击图像时,它会打开一个包含一些信息的对话框。 However, when I click the image, instead of the Dialog opening, it says that MY_APP has stopped on the device screen. 但是,当我单击图像而不是对话框打开时,它表示MY_APP has stopped在设备屏幕上MY_APP has stopped

I am using Android studio for this and I don't get any compiler errors there when I build my project. 我正在为此使用Android Studio,并且在build项目时没有出现任何编译器错误。 However, it doesn't work on the device. 但是,它在设备上不起作用。

Here's my code: UserDataInputActivity.java 这是我的代码: UserDataInputActivity.java

package com.example.owner.introductoryapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

import android.view.View;


public class UserDataInputActivity extends AppCompatActivity
{
    String[] genderOptions = {"Male", "Female", "Other"};

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_data_input);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.select_dialog_singlechoice, genderOptions);
        //Find TextView control
        AutoCompleteTextView acTextView = (AutoCompleteTextView) findViewById(R.id.GenderPromptValue);
        //Set the number of characters the user must type before the drop down list is shown
        acTextView.setThreshold(1);
        //Set the adapter
        acTextView.setAdapter(adapter);
    }

    public void onGenericMenuClick(View v)
    {
        Intent intent;

        if(v.getId() == R.id.pasttests)
        {
            intent =  new Intent(this, PastDiagnosticResult.class);
        }
        else if (v.getId() == R.id.currenttest)
        {
            intent =  new Intent(this, CurrentDiagnosticResultActivity.class);
        }
        else if (v.getId() == R.id.myinfo)
        {
            intent =  new Intent(this, UserDataInputActivity.class);
        }
        else //if(v.getId() == R.id.gaitInfoButton)
        {
            intent = new Intent(this, GaitInformation.class);
        }

        startActivity(intent);
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }
}

GaitInformation.java

package com.example.owner.introductoryapplication;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;

public class GaitInformation extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.GaitInformationContent)
                .setPositiveButton(R.string.acknowledge, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                        //GO BACK TO THE USER DATA INPUT PAGE - HOW?
                    }
                });
        // Create the AlertDialog object and return it
        return builder.create();
    }
}

LOGCAT CRUSH REPORT

2019-01-04 14:24:34.741 8385-8385/com.example.owner.introductoryapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.owner.introductoryapplication, PID: 8385
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:6312)
        at android.view.View$PerformClick.run(View.java:24802)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:169)
        at android.app.ActivityThread.main(ActivityThread.java:6521)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6312) 
        at android.view.View$PerformClick.run(View.java:24802) 
        at android.os.Handler.handleCallback(Handler.java:790) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:169) 
        at android.app.ActivityThread.main(ActivityThread.java:6521) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
     Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.owner.introductoryapplication/com.example.owner.introductoryapplication.GaitInformation}; have you declared this activity in your AndroidManifest.xml?
        at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1940)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1618)
        at android.app.Activity.startActivityForResult(Activity.java:4529)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
        at android.app.Activity.startActivityForResult(Activity.java:4487)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
        at android.app.Activity.startActivity(Activity.java:4848)
        at android.app.Activity.startActivity(Activity.java:4816)
        at com.example.owner.introductoryapplication.UserDataInputActivity.onGenericMenuClick(UserDataInputActivity.java:52)
        at java.lang.reflect.Method.invoke(Native Method) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
        at android.view.View.performClick(View.java:6312) 
        at android.view.View$PerformClick.run(View.java:24802) 
        at android.os.Handler.handleCallback(Handler.java:790) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:169) 
        at android.app.ActivityThread.main(ActivityThread.java:6521) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
2019-01-04 14:24:35.040 2367-2389/? E/libnav: CablComputeBacklightLevel(): UpdateType = DifferentSceneUpdate
2019-01-04 14:24:35.251 2638-2670/? E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.example.owner.introductoryapplication/com.example.owner.introductoryapplication.PastDiagnosticResult/1
2019-01-04 14:24:40.474 2367-2389/? E/libnav: CablComputeBacklightLevel(): UpdateType = DifferentSceneUpdate

I expect the dialog to pop-up, but - instead - it says my app has stopped working. 我希望对话框弹出,但是-相反-它说我的应用已停止工作。

Change this 改变这个

intent = new Intent(this, GaitInformation.class);

into this 进入这个

FragmentManager manager = getSupportFragmentManager();
GaitInformation dialog = new GaitInformation();
dialog.show(manager, "dialog");

You can't open a DialogFragment like this. 您不能打开像这样的DialogFragment。 Please try this. 请尝试这个。

package com.example.owner.introductoryapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

import android.view.View;


public class UserDataInputActivity extends AppCompatActivity
{
    String[] genderOptions = {"Male", "Female", "Other"};

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_data_input);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.select_dialog_singlechoice, genderOptions);
        //Find TextView control
        AutoCompleteTextView acTextView = (AutoCompleteTextView) findViewById(R.id.GenderPromptValue);
        //Set the number of characters the user must type before the drop down list is shown
        acTextView.setThreshold(1);
        //Set the adapter
        acTextView.setAdapter(adapter);
    }

    public void onGenericMenuClick(View v)
    {
        Intent intent = null;

        if(v.getId() == R.id.pasttests)
        {
            intent =  new Intent(this, PastDiagnosticResult.class);
        }
        else if (v.getId() == R.id.currenttest)
        {
            intent =  new Intent(this, CurrentDiagnosticResultActivity.class);
        }
        else if (v.getId() == R.id.myinfo)
        {
            intent =  new Intent(this, UserDataInputActivity.class);
        }
        else //if(v.getId() == R.id.gaitInfoButton)
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(UserDataInputActivity.this);
                builder.setMessage(R.string.GaitInformationContent)
                        .setPositiveButton(R.string.acknowledge, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                //GO BACK TO THE USER DATA INPUT PAGE - HOW?
                            }
                        });
                // Create the AlertDialog object and return it
                builder.create().show();
        }

        if (intent != null) {
            startActivity(intent);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
        }
    }
}

In your class GaitInfomation on line new AlertDialog.Builder(getActivity()); 在您的类GaitInfomation中,添加新的AlertDialog.Builder(getActivity());。 You have to pass valid context which I suspect is null looking at the code. 您必须传递有效的上下文,而我怀疑看代码是否为null。

Update: Instead of launching a new activity 更新:无需启动新活动

      else //if(v.getId() == R.id.gaitInfoButton) {
          AlertDialog.Builder(this)
                  setMessage(R.string.GaitInformationContent)
                 .setPositiveButton(R.string.acknowledge, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                    //GO BACK TO THE USER DATA INPUT PAGE - HOW?
                    return;
                    }
               });
                 .create()
                .show()
           }

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

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