Mã có vẻ đúng. Cho bạn biết rằng đoạn mã sau hoạt động, chỉ thử nghiệm nó:
package com.lid.ps.screens.edit_activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.preference.*;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;
import com.lid.ps.bean.AbstractData;
import com.lid.ps.bean.Action;
import com.lid.ps.bean.ActionFactory;
import com.lid.ps.bean.CommonAlertDialog;
import com.lid.ps.bean.utils.DateTools;
import com.lid.ps.model.Activity;
import com.lid.ps.model.ActivityImpl;
import com.lid.ps.screens.R;
import java.util.Calendar;
/**
* User: Vladimir Ivanov
* Date: 04.07.2010
* Time: 9:58:17
*/
public class EditActivityScreen extends PreferenceActivity
implements DatePickerDialog.OnDateSetListener, AbstractData<Activity> {
private static final int MENU_DELETE_ACTIVITY = 0;
private boolean create = true;
public boolean isCreate() {
return create;
}
private Activity dataContainer;
private EditTextPreference activityNamePref;
private EditTextPreference activityDescPref;
private Preference startDatePref;
private CheckBoxPreference hiddenPref;
private int year;
private int monthOfYear;
private int dayOfMonth;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.activity_prefs);
//this.setContentView(R.layout.edit_screen);
activityNamePref = (EditTextPreference) findPreference("name");
activityDescPref = (EditTextPreference) findPreference("desc");
// We have to do this to get the save/cancel buttons to highlight on
// their own.
getListView().setItemsCanFocus(true);
// Grab the content view so we can modify it.
FrameLayout content = (FrameLayout) getWindow().getDecorView()
.findViewById(android.R.id.content);
// Get the main ListView and remove it from the content view.
ListView lv = getListView();
content.removeView(lv);
// Create the new LinearLayout that will become the content view and
// make it vertical.
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
// Have the ListView expand to fill the screen minus the save/cancel
// buttons.
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
lp.weight = 1;
ll.addView(lv, lp);
// Inflate the buttons onto the LinearLayout.
View v = LayoutInflater.from(this).inflate(
R.layout.edit_screen, ll);
startDatePref = findPreference("time");
hiddenPref = (CheckBoxPreference) findPreference("hidden");
// Initialize buttons
Button cancelButton = (Button) v.findViewById(R.id.cancel_activity);
Button saveButton = (Button) v.findViewById(R.id.save_activity);
cancelButton.setOnClickListener(new CancelOnClickListener());
saveButton.setOnClickListener(new SaveOnClickListener());
setContentView(ll);
// if edit mode...
if (getIntent() != null && getIntent().getExtras() != null) {
// some stuff
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
if (preference == startDatePref) {
new DatePickerDialog(this, this, year, monthOfYear, dayOfMonth).show();
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
private void popAlarmSetToast(Context context) {
String toastText;
//...
final Toast toast = Toast.makeText(context, toastText, Toast.LENGTH_LONG);
toast.show();
}
/**
* updates the preference summary.
*
* @param datePicker date picker
* @param i year
* @param i1 month
* @param i2 day
*/
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
year = i;
monthOfYear = i1;
dayOfMonth = i2;
updateDate();
}
private void updateDate() {
startDatePref.setSummary(
new StringBuilder()
// Month is 0 based so add 1
.append(year).append("-")
.append(monthOfYear + 1).append("-")
.append(dayOfMonth).append(" "));
}
private class CancelOnClickListener implements View.OnClickListener {
public void onClick(View view) {
// go back to the previous page
final Action action = ActionFactory.createAction("back_edit_activity");
if (action != null) {
action.doAction(EditActivityScreen.this);
}
}
}
private class SaveOnClickListener implements View.OnClickListener {
public void onClick(View view) {
// validation
if (activityNamePref.getSummary() == null || activityNamePref.getSummary().length() == 0) {
AlertDialog dialog = new AlertDialog.Builder(EditActivityScreen.this).create();
dialog.setTitle(R.string.validation_failed);
dialog.setMessage(EditActivityScreen.this.getResources().getString(R.string.activity_create_fail));
dialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
dialog.show();
} else {
final Action action = ActionFactory.createAction("save_edit_activity");
if (action != null) {
action.doAction(EditActivityScreen.this);
}
popAlarmSetToast(EditActivityScreen.this);
}
}
}
}
gì về kiểm tra của bạn cho sdk xây dựng? Liệu mã thực sự đi theo điều kiện?
Và vui lòng kiểm tra tên tùy chọn của bạn. Có thể bạn đã không có nó với phương pháp findPreference
.
Nguồn
2010-11-02 20:24:09
Cảm ơn bạn đã giải quyết được vấn đề này cho tôi! Loại bỏ các ưu đãi từ nó PreferenceCategory hoạt động tốt! – stealthcopter
Đã gãi đầu của tôi cho đến khi tôi thấy điều này, không có thắc mắc tất cả mọi thứ không hoạt động sau khi tôi thêm PreferenceCategory! Họ nên ghi lại nó ở đâu đó .. – Bruce