2012-03-14 61 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