2013-02-12 8 views
0

Я хочу уничтожить объект popupView объект View класс i создан в OnClickListener.как уничтожить объект просмотра, который я создал ранее

Я хочу механизм, чтобы каждый раз, когда он должен был создавать новые View. У меня возникла проблема с тем, как я создаю объект View.

Мой полный код:

package com.addictioncounterapp; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.app.AlertDialog.Builder; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.LinearLayout.LayoutParams; 
import android.widget.PopupWindow; 
import android.widget.TextView; 

public class AddictionDetails extends Activity 
{ 
TextView tv_addiction_name, tv_today, tv_yesterday, tv_this_week, tv_this_month, tv_total; 
ImageView iv_back, iv_filter; 
int year, month, day; 
int placeData; 
Boolean state = false; 
DatePickerDialog.OnDateSetListener dateListener; 
SQLiteDatabase database; 
int cat_id = 0; 


@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_addiction_details); 

    Intent intent = getIntent(); 
    final String cat_name = intent.getStringExtra("cat_name"); 
    tv_addiction_name = (TextView) findViewById(R.id.textViewAddictionDetails); 
    tv_addiction_name.setText(cat_name); 

    tv_total = (TextView) findViewById(R.id.textview_total); 
    tv_today = (TextView) findViewById(R.id.textview_today); 
    tv_yesterday = (TextView) findViewById(R.id.textview_yesterday); 
    tv_this_week = (TextView) findViewById(R.id.textview_this_week); 
    tv_this_month = (TextView) findViewById(R.id.textview_this_month); 

    iv_back = (ImageView) findViewById(R.id.imageViewAddictionDetailsBack); 
    iv_back.setClickable(true); 
    iv_back.setOnClickListener(new OnClickListener() 
            { 
             @Override 
             public void onClick(View v) 
             { 
              Intent intent = new Intent(AddictionDetails.this, StartActivity.class); 
              startActivity(intent); 
             } 
            } 
           ); 

    iv_filter = (ImageView) findViewById(R.id.imageViewAddictionDetailsFilter); 
    iv_filter.setClickable(true); 
    iv_filter.setOnClickListener(new OnClickListener() 
            { 
             @Override 
             public void onClick(View v) 
             { 
              if(state == false) 
              { 
               state = true; 
               LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
               final View popupView = layoutInflater.inflate(R.layout.activity_filter_addiction_form, null); 

               final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
               popupWindow.setWidth(300); 
               popupWindow.setHeight(300); 

               final Calendar cal = Calendar.getInstance(); 
               year = cal.get(Calendar.YEAR); 
               month = cal.get(Calendar.MONTH); 
               day = cal.get(Calendar.DAY_OF_MONTH); 

               final EditText etStartDate = (EditText)popupView.findViewById(R.id.editTextFilterStartDate); 
               etStartDate.setOnClickListener(new OnClickListener() 
                        { 
                         @Override 
                         public void onClick(View v) 
                         { 
                          showDialog(1); 
                          placeData = 1; 
                         } 
                        } 
                       ); 

               final EditText etEndDate = (EditText)popupView.findViewById(R.id.editTextFilterEndDate); 
               etEndDate.setOnClickListener(new OnClickListener() 
                        { 
                         @Override 
                         public void onClick(View v) 
                         { 
                          showDialog(1); 
                          placeData = 2; 
                         } 
                        } 
                      ); 

               Button btn_done = (Button) popupView.findViewById(R.id.buttonDone); 
               btn_done.setOnClickListener(new OnClickListener() 
                      { 
                       @Override 
                       public void onClick(View v) 
                       { 
                        if(etStartDate.getText()+""=="" || etEndDate.getText()+""=="") 
                        { 
                         AlertDialog.Builder adb = new Builder(AddictionDetails.this); 
                         adb.setTitle("Error"); 
                         adb.setMessage("Fields can't be blank."); 
                         adb.setIcon(R.drawable.ic_launcher); 
                         adb.setPositiveButton("Ok",new DialogInterface.OnClickListener() 
                                 { 
                                  public void onClick(DialogInterface dialog, int which) 
                                  { 
                                   dialog.dismiss(); 
                                  } 
                                 } 
                               ); 
                         AlertDialog ad = adb.create(); 
                         ad.show(); 
                        } 
                        else 
                        { 
                         SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 

                         Date date1 = null; 
                         try 
                         { 
                          date1 = sdf.parse(etStartDate.getText()+""); 
                         } 
                         catch (ParseException e) 
                         { 
                          e.printStackTrace(); 
                         } 

                         Date date2 = null; 
                         try 
                         { 
                          date2 = sdf.parse(etEndDate.getText()+""); 
                         } 
                         catch (ParseException e) 
                         { 
                          e.printStackTrace(); 
                         } 

                         System.out.println(sdf.format(date1)); 
                         System.out.println(sdf.format(date2)); 

                         if(date1.compareTo(date2)>0) 
                         { 
                          AlertDialog.Builder adb = new Builder(AddictionDetails.this); 
                          adb.setTitle("Error"); 
                          adb.setMessage("Start date cannot be greater than End date."); 
                          adb.setIcon(R.drawable.ic_launcher); 
                          adb.setPositiveButton("Ok",new DialogInterface.OnClickListener() 
                                 { 
                                   public void onClick(DialogInterface dialog, int which) 
                                   { 
                                    dialog.dismiss(); 
                                   } 
                                  } 
                                ); 
                          AlertDialog ad = adb.create(); 
                          ad.show(); 
                         } 
                         else 
                         { 
                          Intent intent = new Intent(AddictionDetails.this, FilteredData.class); 
                          intent.putExtra("start_date", etStartDate.getText()+""); 
                          intent.putExtra("end_date", etEndDate.getText()+""); 
                          intent.putExtra("cat_id", cat_id); 
                          intent.putExtra("cat_name", cat_name); 
                          startActivity(intent); 
                         } 
                        } 
                       } 
                      } 
                     ); 

               Button btn_cancel = (Button) popupView.findViewById(R.id.buttonCancel); 
               btn_cancel.setOnClickListener(new OnClickListener() 
                       { 
                        @Override 
                        public void onClick(View v) 
                        { 

                         popupWindow.dismiss(); 

                         state = false; 
                        } 
                       } 
                      ); 

               dateListener = new DatePickerDialog.OnDateSetListener() 
                    { 
                     @Override 
                     public void onDateSet(DatePicker view, int yr, int monthOfYear, int dayOfMonth) 
                     { 
                      SimpleDateFormat tmpDateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
                      Calendar tmpC1 = Calendar.getInstance(); 
                      tmpC1.set(yr, monthOfYear, dayOfMonth); 
                      Date tmpD1 = tmpC1.getTime(); 
                      String tmpDateString = tmpDateFormat.format(tmpD1);                    
                      update(placeData, tmpDateString); 
                     } 

                     private void update(int position, String strDate) 
                     { 
                      switch(position) 
                      { 
                       case 1: 
                        Log.e("In Addiction details In startDate", strDate); 

                        etStartDate.setText(strDate); 
                        break; 

                       case 2: 
                        Log.e("In Addiction details In endDate", strDate); 

                        etEndDate.setText(strDate); 
                        break; 
                      } 
                     } 
                    }; 

               popupWindow.showAsDropDown(iv_filter, 0, 0); 
              }            
             } 
            } 
           ); 

    loadDB(); 

    Cursor cursor = database.query("category", new String[]{"cat_id"}, "cat_name=?", new String[]{cat_name}, null, null, null); 

    //----------------------fetching id------------------- 

    if(cursor.getCount() > 0) 
     while(cursor.moveToNext()) 
      cat_id = cursor.getInt(0); 
    cursor.close(); 

    //----------------------fetching total------------------- 

    int totalCounter; 
    Cursor totalCursor = database.rawQuery("select sum(cat_attribute_unit) from counter where cat_id ="+cat_id+";", null); 
    if(totalCursor.moveToNext()) 
     totalCounter = totalCursor.getInt(0); 
    else 
     totalCounter = 0; 
    totalCursor.close(); 
    tv_total.setText(totalCounter+""); 

    //----------------------fetching today's count--------------- 

    Calendar cal1 = Calendar.getInstance(); 
    SimpleDateFormat dateFormat1 = new SimpleDateFormat("dd/MM/yyyy"); 

    String todays_date = dateFormat1.format(cal1.getTime()); 
    int todayCounter; 

    Cursor todayCursor = database.rawQuery("select sum(cat_attribute_unit) from counter where cat_id ="+cat_id+" AND counter_entry_date = '"+todays_date+"';", null); 
    if(todayCursor.moveToNext()) 
     todayCounter = todayCursor.getInt(0); 
    else 
     todayCounter = 0; 
    todayCursor.close(); 

    tv_today.setText(todayCounter+""); 

    //----------------------fetching yesterdays count------------------ 

    Calendar cal2 = Calendar.getInstance(); 
    SimpleDateFormat dateFormat2 = new SimpleDateFormat("dd/MM/yyyy"); 
    cal2.add(Calendar.DATE, -1); 

    String yesterdays_date = dateFormat2.format(cal2.getTime()); 

    int yesterdayCounter = 0; 

    Cursor yesterdayCursor = database.rawQuery("select sum(cat_attribute_unit) from counter where cat_id ="+cat_id+" AND counter_entry_date = '"+yesterdays_date+"';", null); 

    if(yesterdayCursor.moveToFirst()) 
     yesterdayCounter = yesterdayCursor.getInt(0); 
    else 
     yesterdayCounter = 0; 

    yesterdayCursor.close(); 

    tv_yesterday.setText(yesterdayCounter+""); 

    //-------------------------fetching current week count-------------------- 

    SimpleDateFormat weekDateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    Calendar c1 = Calendar.getInstance(); 
    c1.set(Calendar.DAY_OF_WEEK, 1); 
    Date weekFirstDate = c1.getTime(); 
    String strWeekFirstDay = weekDateFormat.format(weekFirstDate); 

    Cursor weekCursor = database.rawQuery("select sum(cat_attribute_unit) from counter where cat_id ="+cat_id+" AND counter_entry_date BETWEEN '"+strWeekFirstDay+"' AND '"+todays_date+"';", null); 

    int weekCounter = 0; 
    if(weekCursor.moveToFirst()) 
     weekCounter = weekCursor.getInt(0); 
    else 
     weekCounter = 0; 
    weekCursor.close(); 

    tv_this_week.setText(weekCounter+""); 

    //----------------------fetching current month count-------------------- 

    SimpleDateFormat monthDateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    Calendar c2 = Calendar.getInstance(); 
    c2.set(Calendar.DAY_OF_MONTH, 1); 
    Date monthFirstDate = c2.getTime(); 
    String strMonthFirstDay = monthDateFormat.format(monthFirstDate); 

    Cursor monthCursor = database.rawQuery("select sum(cat_attribute_unit) from counter where cat_id ="+cat_id+" AND counter_entry_date BETWEEN '"+strMonthFirstDay+"' AND '"+todays_date+"';", null); 
    int monthCounter = 0; 
    if(monthCursor.moveToFirst()) 
     monthCounter = monthCursor.getInt(0); 
    else 
     monthCounter = 0; 
    monthCursor.close(); 

    tv_this_month.setText(monthCounter+""); 

    database.close(); 
} 

private void loadDB() 
{ 
    database = openOrCreateDatabase("AddictionCounter.db", SQLiteDatabase.OPEN_READWRITE, null); 
} 

protected Dialog onCreateDialog(int id) 
{ 
    return new DatePickerDialog(this, dateListener, year, month, day); 
} 
} 

Также я не в состоянии передать любой класс в моем IF петле OnClickListener. Он дает ошибку, давая Ctrl + пробел.

ответ

1

уничтожить popupView на

popupWindow.setOnDismissListener 
1

Первая попытка ответить, поправьте меня, если я должен перечитать.

Я думаю, что обычной практикой является создание члена popupWindow, а затем использование setContentView и отклонение, чтобы показать его или не показывать. Но если вам действительно нужно уничтожить его и создать его каждый раз, когда onClick идет:

  • Не объявляйте его окончательным. GC будет очищать его обычно между вызовами OnClick
  • вызов отклонить() после того, как изменения сделаны

Что вы имеете в виду, вы не можете передать любой класс внутри слушателя? Вы имеете в виду, что вы не можете называть такие вещи, как onPause() методы? На всякий случай, подумайте, что когда вы это делаете. Внутри слушателя вы больше не делаете этого из Activity. Если вам нужно обратиться к onCreateDialog или к чему-то, то вы можете сделать это с помощью getParent

+0

В моем случае у меня есть класс класса AddictionDetails. хорошо ... в этом цикле IF, если я напишу Addic ** Ctrl + Space **, он показывает мне ошибку в нижней части окна eclipse. Что может быть причиной того, что я не могу найти какой-либо удар по классу ** Ctrl + пробел ** в этом конкретном цикле IF ... –

+0

Хм, вы должны уметь. Может ли это затмение не получать шаблон? Попробуйте использовать только полное имя com.addictioncounterapp.AddictionDetails и проверить ошибки компиляции. Кроме того, если вы хотите получить доступ к любому из своих членов, вы должны иметь возможность ссылаться на них напрямую. Это работает? – quinestor

+0

Хорошо, я постараюсь. Спасибо, большой брат, за ваше предложение. –

Смежные вопросы