2014-01-16 3 views
0

Я хотел бы показать активность как диалог, но в этом диалоговом окне будет отображаться макет, который динамически заполняется из базы данных, но я не получаю никаких результатов.добавление текстового представления динамически без результатов

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, не так ли? Я имею в виду, что linearlayout и 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

Вы заменили соответствующий код кодом, который я разместил? Что говорит лоцкат? – droidx

+0

** эти ошибки ... ** FATAL ИСКЛЮЧЕНИЕ: главный 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, вам нужно сначала создать его, а затем вызвать findViewById –

+0

проверить мои измененные ans –

0

I f вы хотите динамически добавлять виды в ViewGroup (например, LinearLayout), самая простая вещь, которую вы можете сделать, - это определить представление (например, TextView) в отдельном XML-файле макета.

, например

<?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 для представления, которое вы хотите добавить динамически несколько раз. Это может сэкономить вам много писем, так как определение вида в коде требует гораздо более «письменного», чем требуется в XML.

+0

он отлично работает из myDialog, но мне нужно сделать в myDialog. Может быть, я не знаю, как его реализовать, но на данный момент не могу этого использовать. @ Marek Szanyi – bigmerol

+0

А я знаю, что вам не хватает! Вы должны настроить представление содержимого диалогового окна на свой собственный макет. Итак, в вашем случае это будет dialogoDentro.setContentView (R.layout.dialog); –

Смежные вопросы