-1

在我的 Android 应用程序中,我有一个跟踪器活动,在该活动中,我根据所选日期从 sqlite 数据库中检索锻炼信息(姓名、期间、燃烧的卡路里),并以线性布局显示这些信息,以及作为用户的我的问题选择新日期检索到的数据显示在另一个“新”布局中出现在旧布局上方,但实际上我想要做的是在同一布局上显示新检索到的数据“使用新检索到的数据更改布局内容”,我已尝试删除所有视图的方法,但由于数据出现几分钟然后出现显示,所以它不起作用

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

爪哇代码

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

}}
4

2 回答 2

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 db 访问数据的活动中,您可以通过查找视图并使用 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);

从您的描述中听起来,有可能每次单击某个加载按钮时,您都通过代码将这些文本视图添加到 Activity 中。您可以这样做,只需保留对您添加的这些文本视图的引用,稍后在加载新条目时使用 setText() (但不要再次创建文本视图)。

于 2012-06-13T21:10:03.007 回答
0

如果您希望我们查看任何代码示例,您似乎需要编辑您的问题。

如果这只是练习的几个文本,那么在布局 xml 中提供这些视图 id 就足够了,以便可以在您的活动中引用它们。

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

于 2012-06-13T20:55:07.473 回答