2012-07-03 24 views
5

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; 
    } 

thêm:

private Produtos mContext; 

thay đổi:

firstClass.showProdutoDialog(); 

ĐẾN

mContext.showProdutoDialog(); 

Trả lời

1

Firstclass là gì? Nó là một hoạt động? cố gắng tạo ra sự đối thoại như thế này:

Context mContext = getApplicationContext(); 
Dialog dialog = new Dialog(mContext); 

Nếu bạn không thể có được bối cảnh bằng cách sử dụng getApplicationContext(), tiết kiệm bối cảnh ProdutoAdapter nhận trong constructor.hơn vượt qua bối cảnh này để:

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

khi bạn gọi showProdutoDialog làm điều đó như thế này:

firstClass.showProdutoDialog(mContext); 

hơn, làm:

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

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. –

+0

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. –

+0

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. –

Các vấn đề liên quan