Как изменить содержание макета?

1

В моем приложении Android у меня есть активность трекера, в которой я извлекаю информацию упражнений (имя, период, сжигаемые калории) из базы данных sqlite на основе выбранной даты и отображаю эту информацию в линейном макете, и моя проблема в том, что в качестве пользователя выберите новую дату, когда извлеченные данные будут отображены в другом "новом" макете выше старого, но на самом деле я хочу показать новые извлеченные данные на одном макете "изменить содержимое макета на новые извлеченные данные", я попробовали метод удаления всех представлений, но он не работал, так как данные появляются в течение нескольких минут, а затем появляются

Как я могу это сделать: когда пользователь выбирает новую дату, новые извлеченные данные, отображаемые на одном макете, "обновляют старые данные новым", чтобы не отображать их в новом макете. как я могу это сделать? пожалуйста помогите...

код 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 ответ

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

Проверьте это, если вы хотите узнать больше о static: http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

  • 0
    Спасибо за помощь
  • 0
    Я пытаюсь сделать это: когда пользователь нажимает на элемент списка «Уровень активности для экземпляра», появляется диалоговое окно, затем пользователь выбирает «обновить» свой уровень активности, а затем я хочу поместить это значение в row_data, его можно сделать это? и как я могу это сделать? я попробовал этот подход public void onClick (диалог DialogInterface, int которого) {profile_data [4] = новые ProfileListItems (R.drawable.arrow_left, Activity_level [which], "ActivityLevel"); но это не сработало

Ещё вопросы

Сообщество Overcoder
Наверх
Меню