建议用 DatePicker 代码结构 Android Studio

Advice with DatePicker code structure Android Studio

所以我对 android 编程还很陌生,并没有真正的软件构建经验,但是我确实有 PHP 的基本背景,所以我了解了一些背后的理论.

我目前正在制作一个基本表格 activity,它将条目存储到数据库中,可以在另一个 activity 中调用它,在那里可以查看和编辑等等。

我找到了很多有用的建议来达到我的目的,但目前我在构建代码以实现 DatePicker 对话框时遇到了问题,我面临的问题是日期选择器的示例代码有

public class MainActivity extends Activity implements OnClickListener {

我项目中的代码是public class New extends ActionBarActivity {

因此,当我将行编辑为 "implements OnClickListener" 时,我的微调器下拉菜单不喜欢它。

我试过在没有 "implements OnClickListener"

的情况下输入代码

请看看我有什么并指出正确的方向,我需要了解哪里出了问题以及应该如何构建它。

public class New extends ActionBarActivity {

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

//产品列表

Spinner productList = (Spinner) findViewById(R.id.product);

String[] products = new String[] { "1", "2", "3" };

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item, products);

    productList.setAdapter(adapter);

    productList.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                                   int position, long id) {
            Log.v("products", (String) parent.getItemAtPosition(position));
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub
        }
    });

//原因列表

Spinner reasonList = (Spinner) findViewById(R.id.reason);

String[] reasons = new String[] { "A", "B", "C" };

ArrayAdapter<String> adapters = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item, reasons);

reasonList.setAdapter(adapters);

reasonList.setOnItemSelectedListener(new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View view,
                               int position, long id) {
        Log.v("reasons", (String) parent.getItemAtPosition(position));
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // TODO Auto-generated method stub
    }
});

//开始日期选择器

    private EditText StartDate;

    private DatePickerDialog StartdatePickerDialog;

    private SimpleDateFormat dateFormatter;

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

        dateFormatter = new SimpleDateFormat("dd-MM-yyyy", Locale.US);

        findViewsById();

        setDateTimeField();
    }

private void findViewsById() {

    StartDate = (EditText) findViewById(R.id.startdate);
    StartDate.setInputType(InputType.TYPE_NULL);
    StartDate.requestFocus();

}

private void setDateTimeField() {
    StartDate.setOnClickListener(this);

    Calendar newCalendar = Calendar.getInstance();
    StartdatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            Calendar newDate = Calendar.getInstance();
            newDate.set(year, monthOfYear, dayOfMonth);
            StartDate.setText(dateFormatter.format(newDate.getTime()));
        }

    }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

}


@Override
public void onClick(View view) {
    if(view == StartDate) {
        StartDatePickerDialog.show();
    }
}

@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_new, 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);
}

}

除非我弄错了,否则请尝试从 activity 中删除 implements OnClickListener 并替换

    StartDate.setOnClickListener(this);

    StartDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(view == StartDate) {
                StartDatePickerDialog.show();
            }
        }
    });

并删除开始日期选择器中的 onclick 方法。基本上,implements OnClickListener 所做的是它可以附加到组件(在本例中为 EditText),当单击该组件时,将重定向到您对 onClick 的实现。您正在用专为 StartDate 设计的特定侦听器替换 Activity 侦听器(可由 activity 中的任何组件通过 setOnClickListener(this) 使用)。请注意您的微调器如何都具有 onItemSelectedListeners,它们的工作原理相同。

语言难懂,如有不明白请告诉我。