Android 日期选择器片段将信息传输到主活动



我是编程和安卓新手。我在使用日期选择器片段时遇到问题。在mainActivity上实现DatePickerFragment.OnFragmentInteractionListener时出错,它说"Class MainActivity必须声明为抽象,或者在'OnFragmentInteractionListener'中实现抽象方法'returnDate(String)'

我使用了 datePicker,如 http://developer.android.com/guide/topics/ui/controls/pickers.html 所示。

datePicker 可以工作,但我想将选择的值转移到 mainActivity,我在另一篇文章中采取了一些提示:如何从我的 DatePickerFragment 传输格式化的日期字符串?

真的不知道我错过了什么。我还想知道是否可以传输 de Date 值而不是字符串值。我想在主活动中操纵日期。希望有人能帮助我。这是我的代码:

package com.example.android.datepickertest;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends FragmentActivity
        implements DatePickerFragment.OnFragmentInteractionListener
        {
 private TextView dataSelecionada;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dataSelecionada = (TextView)findViewById(R.id.data_selecionada);
    }
    public void showDatePickerDialog(View v) {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getSupportFragmentManager(), "datePicker");
    }
@Override
    public void setTextDate (int year, int month, int day) {
        TextView displayDataSelecionada = (TextView) findViewById(R.id.data_selecionada);
        dataSelecionada.setText(day + "/" + month +"/" + year);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

和日期拾取器片段:n

package com.example.android.datepickertest;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.DatePicker;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * A simple {@link Fragment} subclass.
 * Activities that contain this fragment must implement the
 * {@link DatePickerFragment.OnFragmentInteractionListener} interface
 * to handle interaction events.
 * Use the {@link DatePickerFragment#newInstance} factory method to
 * create an instance of this fragment.
 */
public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {
    OnFragmentInteractionListener listener;
    public interface OnFragmentInteractionListener {
        public void returnDate(String date);
    };
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        listener=(OnFragmentInteractionListener)getActivity();
        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }
    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
        Calendar c= Calendar.getInstance();
        c.set(year,month,day);
        SimpleDateFormat date = new SimpleDateFormat();
        String dateSet = date.format(c.getTime());
        if (listener !=null){
            listener.returnDate(dateSet);
        }
    }
}

错误有答案,当你实现一个接口时,你应该实现接口中的所有方法。

在您的情况下,您的主活动中没有方法返回日期。

1.创建方法返回日期 或者如果您使用 Android 工作室,只需转到文件 MainActivity 并将光标放在"公共类 MainActivity"上,然后按 Alt+Enter,该方法将自动创建,您将通过此方法在主活动中显示日期。

    如果您需要日期而不是
  1. 字符串,请将返回日期方法的参数更改为日期,并删除该简单日期格式,而不是使用

new Date (c.getTime())

最新更新