Tôi đang phát triển danh mục ứng dụng các sản phẩm có chế độ xem danh sách ngang và tôi không thể mở Hộp thoại tùy chỉnh khi bạn nhấp vào sản phẩm.Làm thế nào để sử dụng Hộp thoại bên trong BaseAdapter?
Một số phần của mã của tôi:
Hoạt động Tiểu học
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");
Chức năng để hiển thị Dialog
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 Hoạt động
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;
}
}
Các lỗi
07-03 09:30:07.639: W/dalvikvm(455): threadid=1: thread exiting with uncaught exception (group=0x40014760)
07-03 09:30:07.659: E/AndroidRuntime(455): FATAL EXCEPTION: main
07-03 09:30:07.659: E/AndroidRuntime(455): java.lang.IllegalStateException: System services not available to Activities before onCreate()
07-03 09:30:07.659: E/AndroidRuntime(455): at android.app.Activity.getSystemService(Activity.java:3922)
07-03 09:30:07.659: E/AndroidRuntime(455): at android.app.Dialog.<init>(Dialog.java:150)
07-03 09:30:07.659: E/AndroidRuntime(455): at android.app.Dialog.<init>(Dialog.java:138)
07-03 09:30:07.659: E/AndroidRuntime(455): at com.primeiroestilo.Produtos.showProdutoDialog(Produtos.java:570)
07-03 09:30:07.659: E/AndroidRuntime(455): at com.primeiroestilo.ProdutoAdapter$1.onClick(ProdutoAdapter.java:83)
07-03 09:30:07.659: E/AndroidRuntime(455): at android.view.View.performClick(View.java:3110)
07-03 09:30:07.659: E/AndroidRuntime(455): at android.view.View$PerformClick.run(View.java:11934)
07-03 09:30:07.659: E/AndroidRuntime(455): at android.os.Handler.handleCallback(Handler.java:587)
07-03 09:30:07.659: E/AndroidRuntime(455): at android.os.Handler.dispatchMessage(Handler.java:92)
07-03 09:30:07.659: E/AndroidRuntime(455): at android.os.Looper.loop(Looper.java:132)
07-03 09:30:07.659: E/AndroidRuntime(455): at android.app.ActivityThread.main(ActivityThread.java:4123)
07-03 09:30:07.659: E/AndroidRuntime(455): at java.lang.reflect.Method.invokeNative(Native Method)
07-03 09:30:07.659: E/AndroidRuntime(455): at java.lang.reflect.Method.invoke(Method.java:491)
07-03 09:30:07.659: E/AndroidRuntime(455): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
07-03 09:30:07.659: E/AndroidRuntime(455): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
07-03 09:30:07.659: E/AndroidRuntime(455): at dalvik.system.NativeStart.main(Native Method)
in
listview của sản phẩm - http://cl.ly/2l0W0u421U1s0t3p2v15
sản phẩm mở - http://cl.ly/0R2s0g2a1C0J171b0n3z
tôi có thể giải quyết pr của tôi oblem !!! Yeah !!! \ O/#
Trên Hoạt động Tiểu học tôi thay đổi:
ProdutoAdapter adapter = new ProdutoAdapter(getApplicationContext(), produtos);
Để
ProdutoAdapter adapter = new ProdutoAdapter(Produtos.this, produtos);
Và trên BaseAdapter Hoạt động tôi thay đổi:
public ProdutoAdapter(Context context, List<Produto> MyProdutos) {
mInflater = LayoutInflater.from(context);
this.MyProdutos = MyProdutos;
downloader = new ImageDownloader();
}
ĐẾN
public ProdutoAdapter(Produtos context, List<Produto> MyProdutos) {
mInflater = LayoutInflater.from(context);
this.MyProdutos = MyProdutos;
downloader = new ImageDownloader();
mContext = context;
}
Và thêm:
private Produtos mContext;
Và thay đổi:
firstClass.showProdutoDialog();
ĐẾN
mContext.showProdutoDialog();
Cảm ơn chàng. Và có, kính đầu tiên là một tham chiếu của Produtos Acativity. tôi làm cho những thay đổi và bây giờ tôi có lỗi này: android.view.WindowManager $ BadTokenException: Không thể thêm cửa sổ - rỗng thẻ không phải dành cho một ứng dụng On line: dialog.show(); Tôi tìm kiếm về lỗi này nhưng tôi không thể khắc phục được. –
Tôi đã sao chép điều này từ một chuỗi khác: Bạn không thể hiển thị cửa sổ/hộp thoại ứng dụng thông qua một Ngữ cảnh không phải là Hoạt động. Hãy kiểm tra lại rằng mỗi lần bạn bắt đầu một hộp thoại, nó sẽ đúng ngữ cảnh. –
Cảm ơn rất nhiều Uriel. Bạn có bất cứ đề nghị để giải quyết vấn đề này? Tôi là người mới bắt đầu và tôi không thể nghĩ ra một cách khác. –