2012-06-13 6 views
-1

Dans mon application Android, j'ai une activité de suivi dans laquelle je récupère les informations des exercices (nom, période, calories brûlées) de la base de données sqlite basée sur la date sélectionnée et affiche ces informations dans une disposition linéaire. l'utilisateur sélectionne une nouvelle date où les données récupérées sont affichées dans une autre "nouvelle" disposition au-dessus de l'ancienne mais ce que je veux réellement faire est d'afficher les nouvelles données récupérées sur la même mise en page "changer le contenu de la mise en page avec les nouvelles données récupérées" , j'ai essayé la méthode remove all views mais cela n'a pas fonctionné puisque les données apparaissent pendant quelques minutes puis disparaissentComment changer le contenu de la mise en page?

Comment je peux faire ceci: quand l'utilisateur sélectionne une nouvelle date les nouvelles données récupérées affichées sur le même mise en page "actualiser les anciennes données par le nouveau" de ne pas les afficher dans une nouvelle mise en page. comment je peux faire ça? S'il vous plaît aidez-moi ..

code java

public class Tracker extends BaseActivity 
    { 
private Button date_btn; 
private ImageButton left_btn; 
private ImageButton right_btn; 
private ImageView nodata; 
private TextView ex_name; 
private TextView ex_BCals; 

private LinearLayout excercises_LL; 
private LinearLayout content_LL ; 
private LinearLayout notes; 
private LinearLayout details; 
private int year,month,day; 
private double tot_excals_burned; 
private Calendar localCalendar; 
private static final int DATE_DIALOG_ID=0; 
private boolean has_ex_details; 
private boolean has_meal_details=false; 
private Cursor exercises_cursor; 


public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.tracker); 




    date_btn=(Button)findViewById(R.id.btn_date); 
    date_btn.setText(FormatDate()); 
    date_btn.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      localCalendar = Calendar.getInstance(); 
      year = localCalendar.get(1); 
      month= localCalendar.get(2); 
      day = localCalendar.get(5); 
      showDialog(DATE_DIALOG_ID); 
     } 
    }); 


    left_btn=(ImageButton)findViewById(R.id.btn_left); 
    left_btn.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      localCalendar.add(5, -1); 
      date_btn.setText(FormatDate(localCalendar,"EEEE, d/MMM/yyyy")); 

      RefreshExercisesData(); 
      RefreshNoDataImage(); 
     } 
    }); 

    right_btn=(ImageButton)findViewById(R.id.btn_right) ; 
    right_btn.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      localCalendar.add(5, 1); 
      date_btn.setText(FormatDate(localCalendar,"EEEE, d/MMM/yyyy")); 

      RefreshExercisesData(); 
      RefreshNoDataImage(); 

     } 
    }); 


    details=(LinearLayout)findViewById(R.id.ll_details); 
    notes=(LinearLayout)findViewById(R.id.ll_notes); 
    excercises_LL=(LinearLayout)findViewById(R.id.ll_exercises); 
    nodata=(ImageView)findViewById(R.id.nodata_imgV); 



    RefreshExercisesData(); 
    RefreshNoDataImage(); 


} 


private String FormatDate() 
{ 

    localCalendar = Calendar.getInstance(); 
    return new SimpleDateFormat("EEEE, d/MMM/yyyy").format(localCalendar.getTime()); 

} 

private String FormatDate(int year, int month, int day) 
{ 
    localCalendar = Calendar.getInstance(); 
    localCalendar.set(year, month, day); 

    return new SimpleDateFormat("EEEE, d/MMM/yyyy").format(localCalendar.getTime()); 
} 

private String FormatDate(Calendar calendar , String format) 
{ 

    return new SimpleDateFormat(format).format(calendar.getTime()); 

} 




private void RefreshExercisesData() 
{ 



    tot_excals_burned=0; 

    DBAdapter db = new DBAdapter(this); 
    db.open(); 
    String selected_date= date_btn.getText().toString(); 
    Log.e("date", selected_date); 


    exercises_cursor = db.getExerciseInfo(selected_date); 

    if(exercises_cursor.getCount() !=0) 
    { 

     has_ex_details=true; 

     details.setVisibility(0); 
     nodata.setVisibility(8); 
     notes.setVisibility(0); 

     //excercises_LL.removeAllViews(); 
     excercises_LL.setWeightSum(1.0F); 
     excercises_LL.setVisibility(0); 



     excercises_LL.setOrientation(LinearLayout.VERTICAL); 

     LayoutInflater exc_LayoutInflater = (LayoutInflater)getApplicationContext().getSystemService("layout_inflater"); 
     LinearLayout layout = (LinearLayout)exc_LayoutInflater.inflate(R.layout.tracker_header_item,null); 
     TextView tot_ex_cals_value=((TextView)(layout).findViewById(R.id.tv_tot_cals_value)); 
     TextView exs_title=((TextView)(layout).findViewById(R.id.tv_item_title)) ; 
     exs_title.setText("Exercises "); 

     (layout).setPadding(0, 36, 0, 0); 
     excercises_LL.addView((View)layout, 0); 
     int i = 1; 

     if (exercises_cursor.moveToFirst()) 
     { 
      do 
      { 
       content_LL=new LinearLayout(this); 
       ex_name=new TextView(this); 
       ex_name.setText(exercises_cursor.getFloat(1)+"," +exercises_cursor.getString(0) + "min "); 
       ex_name.setTextColor(R.color.black); 
       content_LL.addView(ex_name,0); 

       ex_BCals=new TextView(this); 
       ex_BCals.setText(Round(exercises_cursor.getFloat(2)) +" "); 
       ex_BCals.setTextColor(R.color.color_black); 
       content_LL.addView(ex_BCals,1); 

       tot_excals_burned = tot_excals_burned+exercises_cursor.getFloat(2); 

       excercises_LL.addView(content_LL, i); 


       i++; 

      } 
      while (exercises_cursor.moveToNext()); 

     } 
     tot_ex_cals_value.setText(Round(tot_excals_burned)); 

    } 
    else if(exercises_cursor.getCount()==0 ||tot_excals_burned==0) 
    { 

     has_ex_details=false; 


     RefreshNoDataImage(); 

    } 
    exercises_cursor.close(); 
    exercises_cursor.deactivate(); 
    db.close(); 

} 


private void RefreshNoDataImage() 
{  
    if(has_ex_details==false && has_meal_details==false) 
    {  

     notes.setVisibility(8); 
     excercises_LL.setVisibility(8); 
     nodata.setImageResource(R.drawable.bg_nodata); 
     nodata.setVisibility(View.VISIBLE); 


    } 

    else 
     nodata.setVisibility(8); 


} 




protected Dialog onCreateDialog(int id) 
{ 
    switch (id) { 

    case DATE_DIALOG_ID: 
     return new DatePickerDialog(this, mDateSetListener, this.year, this.month, this.day); 
    } 
    return null; 
} 

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() 
{ 
    public void onDateSet(DatePicker paramDatePicker, int year, int monthofYear, int dayofMonth) 
    { 
     Tracker.this.year=year; 
     month=monthofYear; 
     day=dayofMonth; 
     date_btn.setText(FormatDate(year,month,day)); 
     RefreshExercisesData(); 
     RefreshNoDataImage(); 

    } 

}; 


private String Round(double num) { 
    return String.format("%.1f%n", num); 

}} 

Répondre

0

On dirait que vous devez modifier votre question, si vous nous voulez voir des exemples de code.

S'il ne s'agit que de quelques textes pour un exercice, il devrait suffire de donner ces identifiants de vues dans le format xml, afin qu'ils puissent être référencés dans votre activité.

Ensuite, vous pouvez obtenir vos vues avec findViewById dans OnCreate, et lorsque vous recevez des données pour le nouvel exercice, vous mettez à jour ces vues par exemple. TextView.setText().

+0

merci, j'ai essayé ce que vous avez dit avant de poster ma question et essayer cette approche "créer des vues de texte dans l'activité" et le problème encore. connaissez-vous une autre façon de faire cela? – Roba

0

Si vous avez une mise en page, par exemple un comme celui-ci:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:id="@+id/name_textview" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 
    <TextView 
     android:id="@+id/calories_burned_textview" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 
</RelativeLayout> 

Ensuite, dans votre activité où vous avez accès à vos données de votre sqlite db, vous pouvez modifier les textviews existantes dans cette disposition en trouvant la vue et en utilisant la méthode setText.

// load new data occurs above, now want to set 
TextView name = (TextView)findViewById(R.id.name_textview); 
name.setText(newName); 

TextView calsBurned = (TextView)findViewById(R.id.calories_burned_textview); 
calsBurned.setText(newCalsBurned); 

Il est possible, de ce que cela ressemble à votre description, que vous ajoutez ces textviews à l'activité via le code à chaque fois un certain bouton de chargement est cliqué. Vous pouvez le faire, maintenez simplement la référence à ces textviews que vous avez ajoutés et utilisez setText() plus tard lorsque vous chargez une nouvelle entrée (mais ne créez pas les textviews une seconde fois).

+0

J'ai un problème similaire, et j'utilise la même approche que vous dites, mais le problème reste les données apparaissent pendant quelques minutes puis son apparaître – user

+0

qu'en est-il de supprimer la méthode removeAllViews(), il sera utilisé dans ce cas? – user

Questions connexes