Autore Topic: Stesso codice diverso layout  (Letto 383 volte)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Stesso codice diverso layout
« il: 17 Aprile 2013, 16:37:34 CEST »
0
Salve ragazzi e' da stamattina che sto cercando di risolvere questo problema.
Ho una tablelayout incrementata dinamicamente.Al primo caricamento,interrogando un db ottengo il layout desiderato.
Invocando lo stesso metodo, sulla stessa tablelayout,ma con differenti dati il layout mi cambia.
E' solo una freccia,ma non rieso a capire il perche'?
Metodo Invocato

Codice (Java): [Seleziona]
for(String range : DataBaseTasks.aDate)
                          {
                                  cursor = db.getFilteredTasks(which, range.toString());
                                  if(cursor.getCount()>0)
                                  {
                                        TextView topBar = new TextView(getActivity());
                                        if(range.equals("overdue"))
                                        {
                                                topBar.setText("Overdue Tasks");
                                                topBar.setTag("overdue");
                                        }else{
                                                topBar.setText(range);
                                                topBar.setTag(range);

                                        }
                                        topBar.setTextAppearance(getActivity(), R.style.BoldBlue);
                                        topBar.setBackgroundColor(R.drawable.personal_background);
                                        topBar.setPadding(3, 0, 0, 0);
                                    //We set Tag and Id to found this specific TextView(I add +2000 to don't have conflict)
                                        topBar.setId(cursor.getCount()+2000);
                                        tableAllTasks.addView(topBar);
                                         for(int i = 0; i < cursor.getCount();i++)
                                         {
                                                 cursor.moveToNext();
                                                 String complete;
                                                 if(range.equals("overdue"))
                                                 {
                                                         complete = "Overdue";
                                                 }
                                                 else
                                                 {
                                                         complete = "Todo";
                                                 }
                                                 addTableRow(cursor,complete);
                                         }
                                 }
                  }
                         tableAllTasks.removeViews(0, numRow);

Metodo per popolare la tableLayout
Codice (Java): [Seleziona]
public void addTableRow(Cursor cursorTask,final String complete)
        {
                 TableRow row = new TableRow(getActivity());
                 row.setTag("task");
                 idRow = cursorTask.getInt(cursorTask.getColumnIndex("id"));
                 row.setId(idRow);
                 
                 row.setOnClickListener(new OnClickListener() {
                       
                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                        TableRow t = (TableRow) tableAllTasks.findViewById(v.getId());
                        Toast.makeText(getActivity(), "Clicked row with Id : " +t.getId(), Toast.LENGTH_SHORT).show();
                        }
                });
                 
                 final CheckBox chBox = new CheckBox(getActivity());
                 //chBox.setPadding(0, 0, 5, 0);
                 chBox.setGravity(Gravity.CENTER);
                 chBox.setId(idRow);
                 if(cursorTask.getString(cursorTask.getColumnIndex("complete")).equals("Done") && cursorTask.getInt(cursorTask.getColumnIndex("hidden_task")) != 2)
                 {
                         chBox.setChecked(true);
                         values = new ContentValues();
                         values.put("hidden_task", 3);
                         whereClauses = "id=?";
                         String[] whereArgs = new String[] {String.valueOf(chBox.getId())};
                         db.update("tasks", values, whereClauses, whereArgs);
                 }
                 chBox.setOnClickListener(new OnClickListener() {
                       
                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                       
                                if(chBox.isChecked()== true)
                                {
                                        cursor = db.getCompleteStatusById(chBox.getId());
                                        cursor.moveToNext();
                                        status = cursor.getString(cursor.getColumnIndex("complete"));
                                        Log.i("","STATUS TASK : "+status);
                                        values = new ContentValues();
                                        values.put("complete", "Done");
                                        values.put("hidden_task", 3);
                                        whereClauses = "id=?";
                                        String[] whereArgs = new String[] {String.valueOf(chBox.getId())};
                                        db.update("tasks", values, whereClauses, whereArgs);
                                        cursor = db.getCompleteStatusById(chBox.getId());
                                        cursor.moveToNext();
                                        status = cursor.getString(cursor.getColumnIndex("complete"));
                                        Log.i("","STATUS TASK AFTER UPDATE: "+status);
                                       
                                }
                               
                                if(chBox.isChecked() == false)
                                {
                                        cursor = db.getCompleteStatusById(chBox.getId());
                                        cursor.moveToNext();
                                        status = cursor.getString(cursor.getColumnIndex("complete"));
                                        Log.i("","STATUS TASK : "+status);
                                        values = new ContentValues();
                                        values.put("complete", complete);
                                        values.put("hidden_task", 1);
                                        whereClauses = "id=?";
                                        String[] whereArgs = new String[] {String.valueOf(chBox.getId())};
                                        db.update("tasks", values, whereClauses, whereArgs);
                                        cursor = db.getCompleteStatusById(chBox.getId());
                                        cursor.moveToNext();
                                        status = cursor.getString(cursor.getColumnIndex("complete"));
                                        Log.i("","STATUS TASK AFTER UPDATE: "+status);
                                       
                                }
                        }
                });
                 
                 final TextView tvName = new TextView(getActivity());
                 tvName.setTextAppearance(getActivity(), R.style.BoldBlue);
                 tvName.setLayoutParams (new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT,2));
                 tvName.setText(cursorTask.getString(cursorTask.getColumnIndex("name")));
                 tvName.setTag(cursorTask.getString(cursorTask.getColumnIndex("range_date")));
                 tvName.setTextSize(16 * getResources().getDisplayMetrics().density);
                 tvName.setId(idRow);
                 tvName.setPadding(0, 0, 2, 10);

                 ImageView imageArrow = new ImageView(getActivity());
                 imageArrow.setImageResource(R.drawable.ic_arrow2);
                 imageArrow.setLayoutParams (new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT,1));

                 View line = new View(getActivity());
                 line.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 1));
                 line.setBackgroundColor(Color.LTGRAY);
                 String tag = "line".concat(Integer.toString(idRow));
                 line.setTag(tag);
                 
                 ImageButton imageStop = new ImageButton(getActivity());
                 imageStop.setImageResource(R.drawable.ic_stop);
                 imageStop.setBackgroundColor(Color.parseColor("#F8F8FF"));
                 imageStop.setId(idRow);
                 //imageStop.setBackgroundColor(color.black);
                 //imageStop.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
                //imageStop.setPadding(0, 10, 0, 0);
                 imageStop.setVisibility(View.GONE);
                 
                 imageStop.setOnClickListener(new OnClickListener() {
                       
                        @Override
                        public void onClick(View v) {
                               
                                final int id = v.getId();
                                final TableRow tr = (TableRow) tableAllTasks.findViewById(id);
                                final String tag = "line".concat(Integer.toString(id));
                                final View l = (View) tableAllTasks.findViewWithTag(tag);
                                final TextView tName = (TextView) tr.getChildAt(2);
                                final TextView tBar = (TextView) tableAllTasks.findViewWithTag(tName.getTag());
                                Log.i("", "TextView Tbar TAG :" +tBar.getTag());
                                Log.i("", "TextView Tbar ID :" +tBar.getId());
                                // TODO Auto-generated method stub
                                 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                                builder.setTitle("Do you want to hide this Task?")
                                .setMessage(tName.getText())
                            .setPositiveButton("Hide", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                 
                                 Log.i("", "TopBar ID "+tBar.getId());
                                 if((tBar.getId()-2000)!=0)
                                 {
                                         int count = tBar.getId();
                                         count --;
                                         tBar.setId(count);
                                         Log.i("", "TopBar ID -1 : "+tBar.getId());
                                 }
                                 if((tBar.getId()-2000)==0){
                                         tBar.setVisibility(View.GONE);

                                 }
                                 tr.setVisibility(View.GONE);
                                 l.setVisibility(View.GONE);
                                 values = new ContentValues();
                                                 values.put("hidden_task", 2);
                                                 whereClauses = "id=?";
                                                 String[] whereArgs = new String[] {String.valueOf(id)};
                                                 db.update("tasks", values, whereClauses, whereArgs);
                                 
                                 /*tr.setTag("hide_task");
                                 l.setTag("hide_task".concat(tag));*/

                                }
                            })
                            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.dismiss();
                                }
                            })
                            .create().show();
                        }
                });
                 
                 /*Button buttonHide = new Button(getActivity());
                 buttonHide.setText("Hide");
                 buttonHide.setLayoutParams (new TableRow.LayoutParams(60, 30,1));
                 buttonHide.setVisibility(View.GONE);
                 buttonHide.setTextSize(12);
                 buttonHide.setBackgroundColor(Color.parseColor("#bd1421"));
                 buttonHide.setTextColor(Color.parseColor("#F8F8FF"));
                 buttonHide.setGravity(Gravity.CENTER_HORIZONTAL);
                 buttonHide.setOnClickListener(new OnClickListener() {
                       
                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                        Log.i("","Cliccato HIDE");     
                        }
                });*/

                 
                 //row.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                 row.addView(chBox);
                 row.addView(imageStop);
                 row.addView(tvName);
                 row.addView(imageArrow);
        //       row.addView(buttonHide);
                 row.setPadding(2, 0, 2, 0);
                 tableAllTasks.addView(row);
                 tableAllTasks.addView(line);
        }

Allego i risultati differenti
Sull'emulatore la differenza si vede e li' non sarebbe un problema,ma testato su 2 terminali la differenza si nota troppo.
Avete qualche idea?

Offline NanoAndroide

  • Utente junior
  • **
  • Post: 63
  • Respect: +3
    • Google+
    • Mostra profilo
    • MeToo
  • Dispositivo Android:
    GT-S5570
  • Play Store ID:
    MeToo
  • Sistema operativo:
    Windows 7
Re:Stesso codice diverso layout
« Risposta #1 il: 17 Aprile 2013, 17:33:25 CEST »
0
Ti riferisci alla dimensione delle frecce alla fine di ogni linea?
Viene reimpostata la dimensione del font (vedo un tvName.setTextSize(16 * getResources().getDisplayMetrics().density); ). Magari nell'xml viene definito diversamente e, diventando più grande, viene attribuita maggiore altezza alla linea. E la freccia viene scalata in proporzione.

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Stesso codice diverso layout
« Risposta #2 il: 17 Aprile 2013, 17:47:33 CEST »
0
Ti riferisci alla dimensione delle frecce alla fine di ogni linea?
Viene reimpostata la dimensione del font (vedo un tvName.setTextSize(16 * getResources().getDisplayMetrics().density); ). Magari nell'xml viene definito diversamente e, diventando più grande, viene attribuita maggiore altezza alla linea. E la freccia viene scalata in proporzione.

Si mi riferisco alla dimensione delle frecce.
Codice (Java): [Seleziona]
tvName.setTextSize(16 * getResources().getDisplayMetrics().density)e' riferito al testo che rimane lo stesso. E per quanto riguarda l'xml non c'e' una definizione della riga, perche' viene creata a runtime.