【问题标题】:keeps getting red underline on my .show when I use getFragmentManager()当我使用 getFragmentManager() 时,我的 .show 上一直有红色下划线
【发布时间】:2017-05-22 12:48:33
【问题描述】:

所以这是我的问题,我的loginFragment.show(getFragmentManager(), "login"); 中不断出现红色下划线 为什么参数下面有下划线。当我使用getSupportFragmentManager 而不是使用AppCompatActivity 而是使用 Activity 时,是的,程序本身没有错误,但是一旦我单击按钮显示对话框,它就会崩溃。这是我的整个代码.

import android.app.Dialog;    
import android.content.Context;    
import android.content.DialogInterface;    
import android.support.v4.app.DialogFragment;    
import android.support.v7.app.AlertDialog;    
import android.support.v7.app.AppCompatActivity;    
import android.os.Bundle;    
import android.view.LayoutInflater;    
import android.view.View;    
import android.widget.EditText;    
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {        
static Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;
    }
    public void showLogin(View v){
        DialogFragment loginFragment = new LoginDialogFragment();
        loginFragment.show(getFragmentManager(),"login");
    }

    public static class LoginDialogFragment extends DialogFragment{
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState){
            AlertDialog.Builder builder = new
                    AlertDialog.Builder(getActivity());
            LayoutInflater inflater = getActivity().getLayoutInflater();
            View v = inflater.inflate(R.layout.layout_login,null);
            final EditText etUsername = (EditText)
                    v.findViewById(R.id.username);
            final EditText etPassword = (EditText)
                    v.findViewById(R.id.password);
            builder.setView(v).setPositiveButton(R.string.login, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    String username, password;
                    username = etUsername.getText().toString();
                    password = etPassword.getText().toString();
                    String msg;
                    if(username.equalsIgnoreCase("abcd")&&password.equalsIgnoreCase("1234")){
                        msg = "Access Granted";
                    }
                    else {
                        msg = "Access Denied";
                    }
                    Toast.makeText(context, msg,Toast.LENGTH_SHORT).show();
                }
            }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog,int id){

                }
            });
                    return builder.create();
        }
    }
}

【问题讨论】:

  • 在这里也发布您的异常/错误
  • Error:(26, 22) 错误:没有找到适合 show(android.app.FragmentManager,String) 方法的方法 DialogFragment.show(android.support.v4.app.FragmentManager,String) 是不适用(参数不匹配;android.app.FragmentManager 无法转换为 android.support.v4.app.FragmentManager)方法 DialogFragment.show(FragmentTransaction,String) 不适用(参数不匹配;android.app.FragmentManager 无法转换为片段交易)
  • 您还需要从 android.support.v4.app.FragmentActivity 扩展您的类,而不仅仅是从标准 android.AppCompatActivity 来获取此方法。

标签: android dialogfragment


【解决方案1】:

所以这是我的问题,我一直在我的 loginFragment.show(getFragmentManager(), "登录");

这是因为您的 DialogFragment 来自支持库。在这种情况下,您必须使用 getSupportFragmentManager 而不是 getFragmentManager

改变

loginFragment.show(getFragmentManager(),"login");

loginFragment.show(getSupportFragmentManager(),"login");

【讨论】:

  • 我已经这样做了,但是当我单击按钮以显示对话框时,我的程序崩溃了。
  • 由于您使用了正确的 FM,您可能还会遇到其他错误。尝试显示堆栈跟踪
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2020-03-24
  • 2015-08-13
相关资源
最近更新 更多