怎样的android得到一个日期选择器和放大器;时间选择器throgh图像按钮点击选择器、放大器、按钮、图像

2023-09-04 06:07:51 作者:Arrogant 傲慢

主要的是设置listadapter的ListActivity我用可依使用适配器类(TaskAdapter.java),我重写getview(),并在那里我写的code敌人复选框,TextView的&放大器; ImageView的。 TextView的&放大器;复选框,单击事件和放大器; checkedchange工作和放大器; ImageViews click事件还在努力。但problm的是,我试图打开的DatePicker上点击ImageView的,但它显示了以下错误的快照。

Main thing is to set listadapter for ListActivity I used differnent adapter class(TaskAdapter.java) where I override the getview() and in there i write the code foe checkbox, textview & imageview. TextView & checkbox click events & checkedchange working & ImageViews click event also working. But problm is that i am trying to open DatePicker on click of ImageView but it shows an error below in snapshot.

我的code是这里,, HomeActivity

my code is here,, HomeActivity

package com.v3.todo;

import java.util.ArrayList;
import java.util.Calendar;

import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.TimePicker;

public class HomeActivity extends ListActivity {
    DBAdapter db;
    Cursor cr;
    CheckBox[] chk;
    static String[] valChk;
    static int Task_Id, taskId;
    static int[] idchk;
    static String Task_Nm, taskNm;
    EditText edTask;
    Button btnAdd;
    String newTask = "";
    int order;
    Calendar c = Calendar.getInstance();
    private int mYear, mMonth, mDay, mHour, mMinute;
    static final int TIME_DIALOG_ID = 1, DATE_DIALOG_ID = 0;
    String date = "", time = "", dateTime = "";
    // ArrayList al = new ArrayList();
    static ArrayList<Task> m_tasks = new ArrayList<Task>(), t_tasks = null;
    TaskAdapter m_adapter;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.setTitle("To-Do Lists");

        btnAdd = (Button) findViewById(R.id.btnAdd);
        edTask = (EditText) findViewById(R.id.etAddTask);
        edTask.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus == true) {
                    if (edTask.getText().toString()
                            .compareTo("Add task here...") == 0) // default text
                    {
                        edTask.setText("");
                    }
                }
            }
        });

        db = new DBAdapter(HomeActivity.this);
        m_tasks = getTasks();
        if (m_tasks.size() != 0) {
            this.m_adapter = new TaskAdapter(this, R.layout.addchecktomain,
                    m_tasks);
            // lv1.setAdapter(this.m_adapter);
            System.out.println("creating");
            setListAdapter(this.m_adapter);
        } else {

            RelativeLayout rl = (RelativeLayout) findViewById(R.id.layout);
            TextView tv = new TextView(this);
            tv.setText("No To-Do Lists");
            tv.setTextSize(22);
            rl.addView(tv);
        }

        btnAdd.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                newTask = edTask.getText().toString();

                String min = Integer.toString(c.get(Calendar.MINUTE));
                String hr = Integer.toString(c.get(Calendar.HOUR));
                String dd = Integer.toString(c.get(Calendar.DATE));
                String mm = Integer.toString(c.get(Calendar.MONTH));
                String yyyy = Integer.toString(c.get(Calendar.YEAR));
                if (min.length() == 1)
                    min = "0" + min;
                if (hr.length() == 1)
                    hr = "0" + hr;
                if (dd.length() == 1)
                    dd = "0" + dd;
                if (mm.length() == 1)
                    mm = "0" + mm;
                String dtCreate = mm + "-" + dd + "-" + yyyy + " " + hr + ":"
                        + min;
                if (newTask.equals("")) {
                    alertboxNeutral("Warning", "Task should not be empty!",
                            "Okay");
                }
                if (newTask.length() < 2) {
                    alertboxNeutral("Warning",
                            "Task should not be less than 2 Letters", "Okay");
                } else {
                    try {
                        db.open();
                        long id1;
                        order = db.getLastPriority();
                        if (order == 0)
                            id1 = db.insertINtask(taskNm, dtCreate, null, 0, 1);
                        else
                            id1 = db.insertINtask(taskNm, dtCreate, null, 0,
                                    order + 1);

                    } catch (Exception ex) {
                        System.out.println("Within AddTask " + ex.toString());
                    } finally {
                        db.close();
                    }
                    alertboxNeutral("Success", "Saved.", "Okay");
                }
            }
        });
    }

    // Method to fetch Uncompleted tasks from db with ID
    public ArrayList<Task> getTasks() {
        t_tasks = new ArrayList<Task>();
        try {
            db.open();
            cr = db.getUncompletedTask();
            if (cr.moveToFirst()) {
                do {
                    Task t1 = new Task();
                    String[] str = new String[2];
                    str[0] = cr.getString(0);
                    str[1] = cr.getString(1);
                    t1.setTaskID(cr.getString(0));
                    t1.setTaskName(cr.getString(1));
                    t_tasks.add(t1);
                } while (cr.moveToNext());
            }
        } catch (Exception ex) {
            System.out.println("Within Home " + ex.toString());
        } finally {
            cr.close();
            db.close();
        }

        return t_tasks;
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
        menu.setHeaderTitle("Task");
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
        System.out.println("v.getId=" + v.getId());
        Task_Id = (Integer) v.getTag();

    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                .getMenuInfo();

        switch (item.getItemId()) {
        case R.id.edit_task:
            Intent i1 = new Intent(HomeActivity.this, EditTaskActivity.class);
            i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i1);

            return true;
        case R.id.delete_task:
            // database functions
            boolean f = false;
            try {
                db.open();
                f = db.deleteTask(Task_Id);
            } catch (Exception ex) {
                System.out.println("Within Home " + ex.toString());
            } finally {
                db.close();
            }
            if (f == true)
                alertboxNeutral("Success", "Deleted.", "Okay");
            return true;
        default:
            return super.onContextItemSelected(item);
        }
    }

    public void alertboxNeutral(String title, String message, String positive) {
        AlertDialog.Builder alertbox = new AlertDialog.Builder(
                HomeActivity.this);
        if (title.equals("Warning")) {
            alertbox.setTitle(title);
            alertbox.setMessage(message);
            alertbox.setPositiveButton(positive,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            Intent i = new Intent(HomeActivity.this,
                                    HomeActivity.class);
                            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                    | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(i);
                        }
                    });
            alertbox.show();
        } else if (title.equals("Success")) {
            alertbox.setTitle(title);
            alertbox.setMessage(message);
            alertbox.setPositiveButton(positive,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            Intent i = new Intent(HomeActivity.this,
                                    HomeActivity.class);
                            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                    | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(i);
                        }
                    });
            alertbox.show();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

        case R.id.add_task:
            Intent i1 = new Intent(this, AddTaskActivity.class);
            i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i1);
            break;
        case R.id.list_completed:
            Intent i2 = new Intent(this, ListCompletedActivity.class);
            i2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i2);
            break;
        case R.id.rearrange:
            Intent i3 = new Intent(this, RearrangeActivity.class);
            i3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i3);
            break;
        case R.id.exit:
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            break;
        }

        return true;
    }

    /*
     * @Override protected void onPause() { // TODO Auto-generated method stub
     * super.onPause(); finish(); }
     */

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        try {
            db.open();
            m_tasks = getTasks();
        } catch (Exception ex) {
            System.out.println("Within Home " + ex.toString());
        } finally {
            db.close();
        }
        m_adapter = new TaskAdapter(this, R.layout.addchecktomain, m_tasks);

        System.out.println("notify data changed");
        // m_adapter.notifyDataSetInvalidated();
        // m_adapter.notifyDataSetChanged();
        setListAdapter(this.m_adapter);
        super.onResume();

    }

    /*
     * @Override public void onBackPressed() { // TODO Auto-generated method
     * stub db.open(); m_tasks = getTasks(); db.close();
     * System.out.println("notify data changed on back pressed");
     * m_adapter.notifyDataSetInvalidated(); m_adapter.notifyDataSetChanged();
     * super.onBackPressed(); }
     */
    private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;
            updateDisplay();
        }
    };

    private void updateDisplay() {
        // tvDt.setText(new StringBuilder().append(mMonth +
        // 1).append("-").append(mDay).append("-").append(mYear).append(" "));

    }

    // the callback received when the user "sets" the time in the dialog
    private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            mHour = hourOfDay;
            mMinute = minute;
            updateDisplay();
        }
    };

    // updates the time we display in the TextView
    private void timeDisplay() {
        // time=(String)(new
        // StringBuilder().append(pad(mHour)).append(":").append(pad(mMinute)));
    }

    private static String pad(int c) {
        if (c >= 10)
            return String.valueOf(c);
        else
            return "0" + String.valueOf(c);
    }

    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case 0:
            return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
                    mDay);
        }
        return null;
    }

    public static void setDate() {
        // showDialog(0);
    }
}



TaskAdapter.java
package com.v3.todo;

import java.util.ArrayList;
import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.DatePicker;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

public final class TaskAdapter extends ArrayAdapter<Task> {
    ArrayList<Task> tasks;
    Context context1;
    CheckBox chk;
    TextView tv;
    ImageView imgAlram;
    DBAdapter db;
    static int TaskId;
    static int RId;
    Calendar c = Calendar.getInstance();
    boolean f = false;
    private int mYear, mMonth, mDay, mHour, mMinute;
    static final int TIME_DIALOG_ID = 1, DATE_DIALOG_ID = 0;
    String date = "", time = "", dateTime = "";

    public TaskAdapter(Context context, int textViewResourceId,
            ArrayList<Task> tasks) {
        super(context, textViewResourceId, tasks);
        this.tasks = tasks;
        context1 = context;
        RId = textViewResourceId;
    }

    public int getCount() {
        return tasks.size();
    }

    public Task getItem(int position) {
        return tasks.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        final int pos = position;
        final int dbid;
        View v = convertView;

        if (v == null) {
            LayoutInflater vi = (LayoutInflater) context1
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.addchecktomain, null);
        }
        Task t = tasks.get(position);
        if (t != null) {
            chk = (CheckBox) v.findViewById(R.id.cboTask);
            tv = (TextView) v.findViewById(R.id.tvTask);
            imgAlram = (ImageView) v.findViewById(R.id.imageAlram);

            if (chk != null) {
                chk.setId(Integer.parseInt(t.getTaskId()));

                chk.setText("");
                // chk.setTag(Integer.parseInt(t.getTaskId()), t.getTaskName());

                chk.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                    public void onCheckedChanged(CompoundButton buttonView,
                            boolean isChecked) {
                        int taskId = buttonView.getId();
                        if (isChecked) {
                            // /call setTaskComplete(i)
                            // / reset list view or refresh list view
                            String min = Integer.toString(c
                                    .get(Calendar.MINUTE));
                            String hr = Integer.toString(c.get(Calendar.HOUR));
                            String dd = Integer.toString(c.get(Calendar.DATE));
                            String mm = Integer.toString(c.get(Calendar.MONTH));
                            String yyyy = Integer.toString(c.get(Calendar.YEAR));
                            if (min.length() == 1)
                                min = "0" + min;
                            if (hr.length() == 1)
                                hr = "0" + hr;
                            if (dd.length() == 1)
                                dd = "0" + dd;
                            if (mm.length() == 1)
                                mm = "0" + mm;
                            String dtComplete = mm + "-" + dd + "-" + yyyy
                                    + " " + hr + ":" + min;
                            try {
                                db = new DBAdapter(context1);
                                db.open();
                                f = db.setTaskComplete(taskId, dtComplete);
                            } catch (Exception ex) {
                                System.out.println("Within Home "
                                        + ex.toString());
                            } finally {
                                db.close();
                            }
                            if (f == true) {
                                // HomeActivity.referesh = 1;
                                Intent intent = new Intent(context1,
                                        HomeActivity.class);
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                        | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                // HomeActivity.
                                context1.startActivity(intent);
                                Toast.makeText(context1, "Task Completed",
                                        Toast.LENGTH_LONG).show();
                            }
                        }
                    }
                });
            }
            if (tv != null) {
                tv.setText(t.getTaskName());
                dbid = Integer.parseInt(t.getTaskId());
                tv.setTag(dbid);

                tv.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        Toast.makeText(
                                context1,
                                "You have chosen the task: " + " "
                                        + v.getTag().toString() + "  Id: "
                                        + dbid + "::" + pos, Toast.LENGTH_LONG)
                                .show();
                    }
                });
                ((Activity) context1).registerForContextMenu(tv);
            }
            if (imgAlram != null) {
                imgAlram.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        // Write ur code here
                        Toast.makeText(context1, "You have chosen the Alram ",
                                Toast.LENGTH_LONG).show();
                        ((Activity) context1).showDialog(0);
                        ((Activity) context1).showDialog(TIME_DIALOG_ID);
                    }
                });
            }
        }
        return v;
    }

DatePicker的对话框只有一个活动中开放的,但我所说的((活动)CONTEXT1).showDialog(0);在TaskAdapter.java类ImageView的onClick事件,和所有其他code在HomeActivity。并且它得到S错误,如快照。如何实现内TaskAdapter.java类。请给我答案。 谢谢

DatePicker dialog only open within an activity but I am call the ((Activity) context1).showDialog(0); in TaskAdapter.java class in ImageView onClick event, and all other code is in HomeActivity. ANd it give s error like snapshot. How to achieve within TaskAdapter.java class. please give me the answer. Thank you

推荐答案

您有一个抛出:IllegalArgumentException 在的DatePicker日(读取第二和第四红线知道如何我知道)。第九届红线告诉我,这个问题是在 HomeActivity.java 文件,在行363 ,这是在 onCreateDialog 方法的一部分。在这种情况下,显然是DatePickerDialog构造

You have an IllegalArgumentException in the DatePicker's day (read the 2nd and fourth red lines to know how I know that). The 9th red line tells me that the problem is in your HomeActivity.java file, in the line 363, which is part of the onCreateDialog method. In this case, it is clearly the DatePickerDialog constructor.

正如dziobas说,这是可能的,你有一个基地零天,这可能是问题。 MDAY可以设置为一个数字越大表示允许该月份也。您可能要初始化把它当作是私人MDAY = 1来代替。

As dziobas said, it is possible that you have a base zero day, and that could be the problem. mDay could be set to a number higher that the allowed for that month also. You may want to initialize private mDay = 1 instead of leaving it as is.