-1

私のAndroidアプリケーションでは、選択した日付に基づいてsqliteデータベースからエクササイズ情報(名前、期間、消費カロリー)を取得し、これらの情報を線形レイアウトで表示するトラッカーアクティビティがあります。これは、ユーザーとしての問題です。取得したデータが古いものの上に表示される別の「新しい」レイアウトで表示される新しい日付を選択しますが、実際にやりたいのは、同じレイアウトに新しい取得したデータを表示することです「新しい取得したデータでレイアウトの内容を変更します」、iすべてのビューを削除する方法を試しましたが、データが数分間表示されてから表示されなくなるため、機能しませんでした

これを行う方法:ユーザーが新しい日付を選択すると、同じレイアウトに表示された新しい取得データは、新しいレイアウトに表示されないように「古いデータを新しいデータで更新」します。どうすればそれができますか?私を助けてください..

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

}}
4

2 に答える 2

0

コードサンプルを表示したい場合は、質問を編集する必要があるようです。

これが演習用の数個のテキストである場合は、アクティビティで参照できるように、レイアウトxmlでこれらのビューIDを指定するだけで十分です。

次に、OnCreateのfindViewByIdを使用してビューを取得し、新しい演習のデータを受け取ったら、TextView.setText()などを使用してそれらのビューを更新します。

于 2012-06-13T20:55:07.473 に答える
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);

説明のように聞こえることから、読み込みボタンがクリックされるたびに、コードを介してこれらのテキストビューをアクティビティに追加している可能性があります。これを行うことができます。追加したこれらのテキストビューへの参照を保持し、後で新しいエントリをロードするときに setText() を使用します (ただし、テキストビューを 2 回作成しないでください)。

于 2012-06-13T21:10:03.007 に答える