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