【问题标题】:BottomSheetDialog on non activity class非活动类的BottomSheetDialog
【发布时间】:2021-11-06 00:40:51
【问题描述】:

我有一个应用程序。我希望它显示底部工作表对话框。但它崩溃了(下图中应用程序吐司的异常信息请查看)。我希望 BottomSheet 对话框位于非活动类中,如下面的代码

Utils.java

package com.my.newproject5;


import android.app.*;

import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
import android.content.*;
import android.content.res.*;
import android.graphics.*;
import android.graphics.drawable.*;
import android.media.*;
import android.net.*;
import android.text.*;
import android.text.style.*;
import android.util.*;
import android.webkit.*;
import android.animation.*;
import android.view.animation.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.text.*;
import org.json.*;
import android.widget.Button;
import android.view.View;
import com.google.android.material.*;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.DialogFragment;
import com.google.android.material.bottomsheet.BottomSheetDialog;

public class Utils {
    
    
    
    public static void showBottomSheetDialog(String _title, String _message, String _btn1msg, String _btn2msg, double _icID, boolean _cancelable, double _execID, final Context _ctx) {
        final Context ctx = _ctx;
        try{
        final BottomSheetDialog bs_layout = new BottomSheetDialog(_ctx, R.style.BottomSheetLayoutTheme);
        
        bs_layout.setContentView(R.layout.bottomsheet_error);
        
        Button btn1 = (Button)
        bs_layout.findViewById(R.id.button1);
        
        ImageView imageview1 = (ImageView)
        bs_layout.findViewById(R.id.imageview1);
        
        bs_layout.getWindow().findViewById(R.id.design_bottom_sheet).setBackgroundResource(android.R.color.transparent);
        bs_layout.setCancelable(_cancelable);
        bs_layout.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_PANEL); 
        bs_layout.show();
        
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View _view) {
                SketchwareUtil.showMessage(ctx, "HAHAHA");
            }
        });
          
        
        }catch (Exception _e){ 
            SketchwareUtil.showMessage(ctx, _e.toString());
            }
        
     }
}

我做错了什么?我想要实现的是对我的所有活动使用相同的 BottomSheet Dialog 类,然后调用 Utils.showBottomSheet(string, string,context .. etc);

有人可以帮助我如何使它工作吗?只需导入该类,然后调用它以显示底部工作表对话框?谢谢。

图片错误:

I don't know how to embed the photo please click here for the screenshot of error

编辑:我调用 Utils.java 类的类

package com.my.newproject5;

import androidx.appcompat.app.AppCompatActivity;
import androidx.annotation.*;
import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import com.google.android.material.appbar.AppBarLayout;
import android.app.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
import android.content.*;
import android.content.res.*;
import android.graphics.*;
import android.graphics.drawable.*;
import android.media.*;
import android.net.*;
import android.text.*;
import android.text.style.*;
import android.util.*;
import android.webkit.*;
import android.animation.*;
import android.view.animation.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.text.*;
import org.json.*;
import android.widget.Button;
import android.view.View;
import com.google.android.material.*;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.DialogFragment;

public class MainActivity extends AppCompatActivity {
    
    private Toolbar _toolbar;
    private AppBarLayout _app_bar;
    private CoordinatorLayout _coordinator;
    private String private_dir = "";
    
    private Button button1;
    
    @Override
    protected void onCreate(Bundle _savedInstanceState) {
        super.onCreate(_savedInstanceState);
        setContentView(R.layout.main);
        initialize(_savedInstanceState);
        initializeLogic();
    }
    
    private void initialize(Bundle _savedInstanceState) {
        _app_bar = findViewById(R.id._app_bar);
        _coordinator = findViewById(R.id._coordinator);
        _toolbar = findViewById(R.id._toolbar);
        setSupportActionBar(_toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        _toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View _v) {
                onBackPressed();
            }
        });
        button1 = findViewById(R.id.button1);
        
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View _view) {
                Utils.showBottomSheetDialog("bleh", "waw", "ok", "ikr", 0, true, 9, getApplicationContext());
                SketchwareUtil.showMessage(getApplicationContext(), "".substring((int)(0), (int)(0)));
            }
        });
    }
    
    private void initializeLogic() {
    }
    
    
    @Deprecated
    public void showMessage(String _s) {
        Toast.makeText(getApplicationContext(), _s, Toast.LENGTH_SHORT).show();
    }
    
    @Deprecated
    public int getLocationX(View _v) {
        int _location[] = new int[2];
        _v.getLocationInWindow(_location);
        return _location[0];
    }
    
    @Deprecated
    public int getLocationY(View _v) {
        int _location[] = new int[2];
        _v.getLocationInWindow(_location);
        return _location[1];
    }
    
    @Deprecated
    public int getRandom(int _min, int _max) {
        Random random = new Random();
        return random.nextInt(_max - _min + 1) + _min;
    }
    
    @Deprecated
    public ArrayList<Double> getCheckedItemPositionsToArray(ListView _list) {
        ArrayList<Double> _result = new ArrayList<Double>();
        SparseBooleanArray _arr = _list.getCheckedItemPositions();
        for (int _iIdx = 0; _iIdx < _arr.size(); _iIdx++) {
            if (_arr.valueAt(_iIdx))
            _result.add((double)_arr.keyAt(_iIdx));
        }
        return _result;
    }
    
    @Deprecated
    public float getDip(int _input) {
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, _input, getResources().getDisplayMetrics());
    }
    
    @Deprecated
    public int getDisplayWidthPixels() {
        return getResources().getDisplayMetrics().widthPixels;
    }
    
    @Deprecated
    public int getDisplayHeightPixels() {
        return getResources().getDisplayMetrics().heightPixels;
    }
}

【问题讨论】:

    标签: android class dialog


    【解决方案1】:

    我已经在 Android Studio 中检查了您的代码,它运行良好。您调用此方法的位置可能是您的上下文为空。请在您调用此方法的位置发布代码

    【讨论】:

    • 我编辑了帖子,先生。在那里。谢谢。有什么我错过的吗?
    • 是的,我遇到了问题,请像这样调用 Utils.showBottomSheetDialog("bleh", "waw", "ok", "ikr", 0, true, 9, MainActivity.this);它会工作
    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多