2014-01-16 87 views
0

我想顯示一個活動作爲對話框,但該對話框將顯示一個從數據庫動態填充的佈局,但我沒有得到任何結果。動態添加textview而沒有結果

package chintan.khetiya.sqlite.cursor; 


import java.util.ArrayList; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

public class lista extends Activity { 

    private ListView lista; 
    DatabaseHandler db; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listado); 

     //SE HACE TODO EL PROCESO EJECUTANDO UNA FUNCION 

     Refresh(); 

     lista.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, final int position,long id) { 

         final int selected_row = position; 

         final String cliente = DameCliente(selected_row); 
         final int limite = DameConteo(); 
         int i; 

         AlertDialog.Builder myDialog 
         = new AlertDialog.Builder(lista.this); 

我的問題是在這裏

LinearLayout linear = (LinearLayout) findViewById(R.id.generar_text); 
TextView text = new TextView(lista.this); 
text.setText("hola"); 

當然,這是一個考驗。我會做一個循環來創建更多的文字瀏覽,但我需要建立第一個,然後循環更多。

LayoutInflater inflater = getLayoutInflater(); 
myDialog.setView(inflater.inflate(R.layout.dialog, null)); 
myDialog.setTitle(cliente); 
myDialog.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() { 
    // do something when the button is clicked 
    public void onClick(DialogInterface arg0, int arg1) { 
    } 
}); 
myDialog.setNeutralButton("Eliminar Pedido", new DialogInterface.OnClickListener() { 
    // do something when the button is clicked 
    public void onClick(DialogInterface arg0, int arg1) { 
     final int eliminar = selected_row + 1; 
     AlertDialog.Builder dialogoDentro = new AlertDialog.Builder(lista.this); 
     dialogoDentro.setTitle("Alerta !"); 
     dialogoDentro.setMessage("Eliminar el Pedido ?"); 
     dialogoDentro.setNeutralButton("Eliminar", new DialogInterface.OnClickListener({ 
      // do something when the button is clicked 
      public void onClick(DialogInterface arg0, int arg1) { 
       db.Delete_Pedido(eliminar); 
       lista.this.Refresh(); 
      } 
     }); 
     dialogoDentro.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() { 
      // do something when the button is clicked 
      public void onClick(DialogInterface arg0, int arg1) { 
      } 
     }); 
     dialogoDentro.show(); 
    } 
}); 
myDialog.show(); 
} 
}); 
} 

public void Refresh(){ 
    int limite = DameConteo();// numero de columnas insertadas como productos 
    int numero_pedidos = NumeroPedidos(); 



     //Toast.makeText(getApplicationContext(), "Valor Columna: " + ValorColumna(columna) + " -- Columna: " + columna + " -- Precio : " + ValorPrecio(columna), Toast.LENGTH_SHORT).show(); 

     ArrayList<lista_entrada> datos = new ArrayList<lista_entrada>(); 

     for (int a = 1; a <= numero_pedidos;a ++){ 

      String pedidor = InfoPedidos(a).getString(1); 
      float iva = (float) 1.16; 
      int articulos = 0; 
      float subtotal = 0; 
      float total = 0; 

       for (int b=0; b<limite; b++){ 
       String columna = DameColumna(b).toString(); 
       articulos = articulos + ValorColumna(columna,a); 
       subtotal = subtotal + (ValorColumna(columna,a)*(ValorPrecio(columna))); 
       total = total + (float) (((ValorColumna(columna,a)*(ValorPrecio(columna)))) * iva); 
       } 

       datos.add(new lista_entrada(pedidor,"Pedido: " + articulos + " artículos", "Subtotal: $" + String.format("%.2f", subtotal), "Total: $" + String.format("%.2f", total))); 
       //} 
     } 

     lista = (ListView) findViewById(R.id.ListView_listado); 
     lista.setAdapter(new lista_adaptador(this, R.layout.entrada, datos){ 
      @Override 
      public void onEntrada(Object entrada, View view) { 
       if (entrada != null) { 
        TextView nombre = (TextView) view.findViewById(R.id.nombre); 
        if (nombre != null) 
         nombre.setText(((lista_entrada) entrada).getNombre()); 

        TextView articulos = (TextView) view.findViewById(R.id.articulos); 
        if (articulos != null) 
         articulos.setText(((lista_entrada) entrada).getArticulos()); 

        TextView subtotal = (TextView) view.findViewById(R.id.subtotal); 
        if (subtotal != null) 
         subtotal.setText(((lista_entrada) entrada).getSubtotal()); 

        TextView total = (TextView) view.findViewById(R.id.total); 
        if (total != null) 
         total.setText(((lista_entrada) entrada).getTotal()); 
       } 
      } 
     }); 

    } 

    @Override 
    public void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     Refresh(); 

     } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.Clientes: 
       finish(); 
       startActivity(new Intent(this, Main_Screen.class)); 
       return true; 

      case R.id.Productos: 
       finish(); 
       startActivity(new Intent(this, Product_Screen.class)); 
       return true; 

      case R.id.Nuevo_Pedido: 
       finish(); 
       startActivity(new Intent(this, home_screen.class)); 
       return true; 

      case R.id.listado_pedidos: 
       finish(); 
       startActivity(new Intent(this, lista.class)); 
       return true;  

      case R.id.salir: 
       finish(); 
       return true; 
      default: 
     return super.onOptionsItemSelected(item); 
    } 
    } 

public String DameCliente(int contact_name){ 

     //product_data.clear(); 
    db = new DatabaseHandler(this); 
     ArrayList<Pedido> pedido_array_from_db = db.Get_Pedido(); 

     String cte_name = pedido_array_from_db.get(contact_name).get_contact_name(); 
     return cte_name; 
    } 

public int DameConteo(){ 

    db = new DatabaseHandler(this); 
    int conteo = db.Get_Total_Products(); 
    return conteo; 
} 

public int NumeroPedidos(){ 

    db = new DatabaseHandler(this); 
    int numero = db.Get_Total_Pedido(); 
    return numero; 
} 

public Cursor InfoPedidos(int id){ 

    db = new DatabaseHandler(this); 
    Cursor cursor = db.Get_Pedido(id); 
    return cursor; 

} 

public String DameColumna(int columna_id){ 
    db = new DatabaseHandler(this); 
    ArrayList<Columna> columna_array_from_db = db.Get_Columna(); 

    String columna = columna_array_from_db.get(columna_id).get_columnaName(); 
    return columna; 

} 

public int ValorColumna(String columna, int a){ 
    String valor_a = String.valueOf(a); 
    db = new DatabaseHandler(this); 
    int valor = db.get_valor_columna(columna,valor_a); 
    return valor; 

} 

public float ValorPrecio(String columna){ 
    db = new DatabaseHandler(this); 
    float valor = db.get_valor_precio(columna); 
    return valor; 

} 


} 
+0

「線性」佈局是R.layout.dialog的一部分,是嗎?我的意思是線性佈局和你面對問題的textview是對話的元素..是嗎? – droidx

+0

這是對的,問題出在對話框中。我沒有錯誤,但都不能看結果..對話框的內容是空的。 – bigmerol

+0

是的,「線性佈局」是R.layout.dialog的一部分,它沒有TextView。我需要在.java文件中建立它。 – bigmerol

回答

0

試試這個。

變化

LinearLayout linear = (LinearLayout) findViewById(R.id.generar_text); 
TextView text = new TextView(lista.this); 
text.setText("hola"); 
LayoutInflater inflater = getLayoutInflater(); 
myDialog.setView(inflater.inflate(R.layout.dialog, null)); 

LayoutInflater inflater = getLayoutInflater(); 

View view = inflater.inflate(R.layout.dialog, null); 
LinearLayout linear = (LinearLayout) view.findViewById(R.id.generar_text); 

TextView text = new TextView(this); 
text.setText("hola"); 
linear.addView(text); 
myDialog.setView(view); 
+0

我已經有這個,添加我的字符​​串「文本」。 如果我使用你的代碼,它會崩潰。 – bigmerol

+0

你是否用我貼的代碼替換了相關的代碼? logcat說什麼? – droidx

+0

**這些都是錯誤... ** 致命異常:主要 顯示java.lang.NullPointerException 在chintan.khetiya.sqlite.cursor.lista $ 1.onItemClick(lista.java:61) 在android.widget .AdapterView.performItemClick(AdapterView.java:298)。 **以及更多,當我更改您的最後一篇文章的代碼。** – bigmerol

0

改變這一點:

LinearLayout linear = (LinearLayout) findViewById(R.id.generar_text); 
TextView text = new TextView(lista.this); 
text.setText("hola"); 

到:

AlertDialog dialog=myDialog.create(); 
LinearLayout linear = (LinearLayout) dialog.findViewById(R.id.generar_text); 
TextView text = new TextView(lista.this); 
text.setText("hola"); 
dialog.show(); 
+0

當我這樣做時,eclipse讓我按照一些步驟來糾正錯誤,最後發送給我另一個錯誤... LinearLayout linear =(LinearLayout) ((Activity)myDialog).findViewById(R.id.generar_text); **錯誤** 無法從AlertDialog.Builder強制轉換爲活動。 @vipul mittal – bigmerol

+0

您的myDialog是AlertDialog.Builder的對象,您需要首先調用create對象,然後調用findViewById –

+0

檢查我編輯的ans –

0

我如果要將視圖動態添加到ViewGroup(例如LinearLayout),最簡單的方法是在獨立的佈局xml文件中定義View(例如TextView)。

例如

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    android:id="@id/label" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:lines="1" 
    android:textIsSelectable="true" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
/> 

存儲爲/res/layout/mytextview.xml

現在的代碼,你想要把視圖動態,而不是通過findViewById你找到充氣的一個每次以視圖的新實例爲例:

LayoutInflater inflater = getLayoutInflater(); 
LinearLayout rootView = (LinearLayout) view.findViewById(R.id.rootView); 

for(int i=0; i < 5; ++i) 
{ 
    TextView mytextview = (TextView) inflater.inflate(R.layout.textview, null); 
    mytextview.setText("hola"); 
    rootView.addView(mytextview); 
} 

注意:如果以這種方式執行此操作,則可以爲您想要多次動態添加的視圖設置XML中的所有樣式和內容。這可以使您免於大量寫作,因爲在代碼中定義View的外觀涉及比XML中所需的更多的「書寫」。

+0

它完全使用myDialog,但我需要在myDialog中完成。也許我不知道如何實現它,但目前不能使用它。 @ Marek Szanyi – bigmerol

+0

啊,我知道你錯過了什麼!您必須將對話框的內容視圖設置爲您的自定義佈局。所以在你的情況下,這將是dialogoDentro.setContentView(R.layout.dialog); –