2012-06-13 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); 

}} 

回答

0

看起来你需要编辑你的问题,如果你让我们看到任何代码示例。

如果这只是一个练习的几个文本,它应该足以在布局xml中给出这些视图ID,以便它们可以在您的活动中被引用。

然后,您可以在OnCreate中使用findViewById获取您的视图,并且当您收到新练习的数据时,您可以使用例如TextView.setText()。

+0

谢谢,我已经尝试了你在我发布我的问题之前所说的话,并尝试这种方法“在活动中创建文本视图”,问题仍然存在。 你知道另一种方法吗? – Roba

0

如果你有一个布局,例如,一个这样的:

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

然后在你的活动,你必须从你的SQLite数据库访问你的数据,你可以在这个布局中修改现有textviews通过寻找该视图和使用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); 

这是可能的,从它听起来像你的描述,你是通过代码的每一部分负荷按钮被点击时添加这些textviews的活动。您可以执行此操作,只需保留对您添加的这些文本视图的引用,并且稍后在加载新条目时使用setText()(但不要第二次创建文本视图)。

+0

我有类似的问题,我用同样的方法,你说,但问题仍然是数据出现几分钟,然后它的dis出现 – user

+0

除去removeAllViews()方法它将在这种情况下使用? – user