Android 如何在BaseAdapter中使用对话框?

Android 如何在BaseAdapter中使用对话框?,android,listview,dialog,baseadapter,Android,Listview,Dialog,Baseadapter,我正在使用水平列表视图开发产品的应用程序目录,当您单击产品时,我无法打开自定义对话框 我的代码的某些部分: 主要活动 public class Produtos extends Activity { public static String ListadeProdutos; private ProdutosAdapter dbHelper; private ProgressDialog progressDialog; private TiposAdapter ti

我正在使用水平列表视图开发产品的应用程序目录,当您单击产品时,我无法打开自定义对话框

我的代码的某些部分:

主要活动

public class Produtos extends Activity {
    public static String ListadeProdutos;
    private ProdutosAdapter dbHelper;
    private ProgressDialog progressDialog;
    private TiposAdapter tipDB;
    private CategoriasAdapter catDB;
    private AutoCompleteTextView AutBusca;
    public static String cateId, tipoId, filtroAz, busca;
    Cursor AllProdutos;

    //LazyAdapter adapter;

    public static String theProdNome, theProdDesc, theProdFoto;
    public static int ProdutoAtual;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        overridePendingTransition(R.anim.fadein, R.anim.fadeout);
        setContentView(R.layout.produtos);

        cateId = getIntent().getStringExtra("cat");
        tipoId = getIntent().getStringExtra("tipo");
        filtroAz = getIntent().getStringExtra("filtroAz");
        busca = getIntent().getStringExtra("busca");

        theProdNome = getIntent().getStringExtra("prodNome");
        theProdDesc = getIntent().getStringExtra("prodDesc");
        theProdFoto = getIntent().getStringExtra("prodFoto");
public class ProdutoAdapter extends BaseAdapter {
    ImageDownloader downloader;
    private List<Produto> MyProdutos;
    private LayoutInflater mInflater;
    private ViewHolder holder;

    static class ViewHolder{
        private TextView titulo;
        private ImageView img;
    }


    public ProdutoAdapter(Context context, List<Produto> MyProdutos) {
        mInflater = LayoutInflater.from(context);
        this.MyProdutos = MyProdutos;
        downloader = new ImageDownloader();
    }


    @Override
    public int getCount() {
        return MyProdutos.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int posicao, View convertView, ViewGroup arg2) {
        final Produto p = MyProdutos.get(posicao);

            convertView = mInflater.inflate(R.layout.row_produtos, null);
            holder = new ViewHolder();

            holder.titulo = (TextView) convertView.findViewById(R.id.NomeProduto);
            holder.img = (ImageView) convertView.findViewById(R.id.FotoProduto);
            holder.img.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    Produtos firstClass = new Produtos();

                    firstClass.theProdNome = p.getNome();
                    firstClass.theProdDesc = p.getProdDesc();
                    firstClass.theProdFoto = p.getimgNome();


                    firstClass.showProdutoDialog();
                }

            });

        convertView.setTag(holder);

        holder.titulo.setText(p.getNome());
        downloader.download(p.getimgNome(), holder.img);


        return convertView;
    }

}
显示对话框的功能

public void showProdutoDialog(){
  final Dialog dialog = new Dialog(this,R.style.CustomDialogTheme);

  dialog.setContentView(R.layout.produto);//carregando o layout do dialog do xml

  if ( theProdNome != "" ){
    //carrega os dados
    TextView titulo = (TextView) dialog.findViewById(R.id.NomeProduto);
    WebView desc = (WebView) dialog.findViewById(R.id.DescricaoProduto);
    ImageView img = (ImageView) dialog.findViewById(R.id.FotoProduto);

    titulo.setText(theProdNome);

    String html; 
    html = "<strong>Características do Produto</strong><br>"+ theProdDesc;

    String mime = "text/html";
    String encoding = "utf-8";

    desc.getSettings().setJavaScriptEnabled(false);
    desc.loadDataWithBaseURL(null, html, mime, encoding, null);
    desc.setBackgroundColor(Color.TRANSPARENT);
    desc.scrollTo(0, 0);

        final Button fechar = (Button) dialog.findViewById(R.id.bt_fechar);
    fechar.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            //ação do botão cancelar
            dialog.dismiss();//encerra o dialog
        }
    });

       dialog.show();//mostra o dialog

   }else{
       Toast.makeText(this, "Nenhum impresso encontrado", Toast.LENGTH_SHORT).show(); 
   }

  }

BaseAdapter活动中I更改:

    ProdutoAdapter adapter = new ProdutoAdapter(getApplicationContext(), produtos);  
    public ProdutoAdapter(Context context, List<Produto> MyProdutos) {  
         mInflater = LayoutInflater.from(context);  
         this.MyProdutos = MyProdutos;  
         downloader = new ImageDownloader();  
    }  
更改

    private Produtos mContext;  
    firstClass.showProdutoDialog();  


什么是头等舱?这是一项活动吗?尝试创建如下对话框:

Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);
firstClass.showProdutoDialog(mContext);
如果无法使用getApplicationContext()获取上下文,请在构造函数中保存ProdutAdapter接收的上下文。然后将此上下文传递给:

 Context mContext;
 public ProdutoAdapter(Context context, List<Produto> MyProdutos) {
    mInflater = LayoutInflater.from(context);
    this.MyProdutos = MyProdutos;
    downloader = new ImageDownloader();
    mContext = context;
}
然后,你要:

  public void showProdutoDialog(Context context){
      final Dialog dialog = new Dialog(context,R.style.CustomDialogTheme);
      //continue from here

谢谢你,伙计。是的,第一类是Produtos Acativity的参考。我进行了更改,现在出现了以下错误:android.view.WindowManager$BadTokenException:无法添加窗口--标记null不适用于第行的应用程序:dialog.show();我搜索了此错误,但无法修复。我从另一个线程复制了此错误:无法通过非活动的上下文显示应用程序窗口/对话框。请检查每一次你启动一个对话框时,它的上下文是否正确。非常感谢Uriel。你有什么解决这个问题的建议吗?我是一个初学者,我不能想其他的方法。忽略我的评论,我可以解决我的解决方案,并在我的问题的末尾添加。尽管如此,谢谢你!
Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);
 Context mContext;
 public ProdutoAdapter(Context context, List<Produto> MyProdutos) {
    mInflater = LayoutInflater.from(context);
    this.MyProdutos = MyProdutos;
    downloader = new ImageDownloader();
    mContext = context;
}
firstClass.showProdutoDialog(mContext);
  public void showProdutoDialog(Context context){
      final Dialog dialog = new Dialog(context,R.style.CustomDialogTheme);
      //continue from here