2012-03-14 81 views
1

在我的Android应用程序中,我有一个跟踪器活动,在该活动中,我根据所选日期从sqlite数据库中检索练习信息(名称,句号,燃烧卡路里),并以线性布局显示这些信息,用户选择新的日期检索到的数据显示在另一个“新”布局显示在旧的布局上方,但实际上我想要做的是在同一个布局上显示新的检索到的数据“用新检索的数据更改布局内容” ,我试图删除所有视图的方法,但它没有工作,因为数据出现几分钟,然后DIS出现如何更改布局的内容?

我怎么能做到这一点:当用户选择一个新的日期新的检索数据显示在同一个布局“通过新的数据刷新旧数据”而不是以新的布局显示它们。我该怎么做?请帮我...

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

}} 

回答

1

它,因为你定义这些变量为静态:

public static int icon; 
public static String data_text; 
public static String text; 

由于这些变量只有一个实例是为创建结果该类的所有实例。因此,当您每次创建新的Profile时,它们都会被新值覆盖。你需要从变量声明中删除static关键字:

public int icon; 
public String data_text; 
public String text; 

然后你就不能访问他们为静态的,所以你需要像这样访问:

Profile pli = data[position]; 
holder.imgIcon.setImageResource(pli.icon); 
holder.Datatxt.setText(pli.data_text); 
holder.txt.setText(pli.text); 

看看这个,如果你想了解更多有关statichttp://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

+0

感谢帮助我 – user 2012-03-14 23:38:24

+0

荫试图做到这一点:当用户点击列表项脱颖而出的实例将出现一个对话框,则用户会选择“更新”自己的活动水平的活动水平,那么我想把这个值放在row_data中,它可能做到这一点?以及我如何做到这一点?我试过这种方法public void onClick(DialogInterface dialog,int which){profile_data [4] = new ProfileListItems(R.drawable.arrow_left,Activity_level [which],“ActivityLevel”);但它没有工作 – user 2012-03-16 18:25:51