Sean I noticed in the copy of my email that was sent to me, that the
formatting went haywire at the point where I started marking it, so here is
another copy that I won't touch.
Mike
package com.mmc2;
import java.sql.Date;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ContextMenu;
import android.view.SubMenu;
import android.widget.AdapterView;;
public class todolist extends Activity {
static final private int BACK_TO_START = Menu.FIRST + 10;
static final private int ADD_NEW_TODO = Menu.FIRST + 11;
static final private int REMOVE_TODO = Menu.FIRST + 12;
static final private int REPORTS = Menu.FIRST;
static final private int MISSION = Menu.FIRST + 1;
static final private int FOCUS = Menu.FIRST + 2;
static final private int INPUT = Menu.FIRST + 3;
static final private int CASH_COUNT = Menu.FIRST + 4;
static final private int SETUP = Menu.FIRST + 5;
static final private int OUTPUT = Menu.FIRST + 6;
static final private int subSetupTitle = SubMenu.FIRST;
static final private int subSetupSetup = SubMenu.FIRST+1;
private ArrayList<ToDoItem> todoItems;
private ListView myListView;
private EditText myEditText;
// private ArrayAdapter<ToDoItem>aa;
private ToDoItemAdapter aa;
private static final String TEXT_ENTRY_KEY = "TEXT_ENTRY_KEY";
private static final String ADDING_ITEM_KEY = "ADDING_ITEM_KEY";
private static final String SELECTED_INDEX_KEY ="SELECTED_INDEX_KEY";
@Override
public void onDestroy() {
super.onDestroy();
toDoDBAdapter.close();
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences uistate = getPreferences(0);
SharedPreferences.Editor editor = uistate.edit();
editor.putString(TEXT_ENTRY_KEY, myEditText.getText().toString());
editor.putBoolean(ADDING_ITEM_KEY, addingNew);
editor.commit();
}
private void restoreUIState() {
SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);
String text = settings.getString(TEXT_ENTRY_KEY, "");
Boolean adding = settings.getBoolean(ADDING_ITEM_KEY, false);
myListView.setSelection(settings.getInt(SELECTED_INDEX_KEY, -1));
if (adding) {
addNewItem();
myEditText.setText(text);
toDoListCursor.requery();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(SELECTED_INDEX_KEY, myListView.getSelectedItemPosition());
super.onSaveInstanceState(outState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
int pos = -1;
if (savedInstanceState !=null)
if (savedInstanceState.containsKey(SELECTED_INDEX_KEY))
pos = savedInstanceState.getInt(SELECTED_INDEX_KEY, -1);
myListView.setSelection(pos);
}
/** Called when the activity is first created. */
ToDoDBAdapter toDoDBAdapter;
FocusDBAdapter focusDBAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myListView = (ListView)findViewById(R.id.myListView);
myEditText = (EditText)findViewById(R.id.myEditText);
todoItems = new ArrayList<ToDoItem>();
int resID = R.layout.todolist_item;
aa = new ToDoItemAdapter(this, resID, todoItems);
myListView.setAdapter(aa);
myEditText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
{ ToDoItem newItem;
newItem = new ToDoItem(myEditText.getText().toString());
if (mission) { toDoDBAdapter.insertTask(newItem);
updateArray(); }
if (focus) { focusDBAdapter.insertTask(newItem);
updateFocusArray(); }
myEditText.setText("");
aa.notifyDataSetChanged();
cancelAdd();
return true; }
}
return false;
}
});
registerForContextMenu(myListView);
// restoreUIState();
toDoDBAdapter = new ToDoDBAdapter(this);
toDoDBAdapter.open();
focusDBAdapter = new FocusDBAdapter(this);
focusDBAdapter.open();
if (mission) { populateTodoList(); }
if (focus) { populateFocusList(); }
// setContentView(R.layout.main);
findViewById(R.id.myListView).setSelected(true);
setContentView(R.layout.title_page);
}
Cursor toDoListCursor;
private void populateTodoList() {
toDoListCursor = toDoDBAdapter.getAllToDoItemsCursor();
startManagingCursor(toDoListCursor);
updateArray();
}
private void updateArray() {
toDoListCursor.requery();
todoItems.clear();
if (toDoListCursor.moveToFirst())
do {
String task =
toDoListCursor.getString(ToDoDBAdapter.TASK_COLUMN);
long created =
toDoListCursor.getLong(ToDoDBAdapter.CREATION_DATE_COLUMN);
long mmc2index = toDoListCursor.getLong(ToDoDBAdapter.KEY_ID_COLUMN);
ToDoItem newItem = new ToDoItem(task, new Date(created), mmc2index );
todoItems.add(0, newItem);
} while(toDoListCursor.moveToNext());
aa.notifyDataSetChanged();
}
Cursor focusCursor;
private void populateFocusList() {
focusCursor = focusDBAdapter.getAllFocusItemsCursor();
startManagingCursor(focusCursor);
updateFocusArray();
}
private void updateFocusArray() {
focusCursor.requery();
todoItems.clear();
if (focusCursor.moveToFirst())
do {
String task =
focusCursor.getString(FocusDBAdapter.TASK_COLUMN);
long created =
focusCursor.getLong(FocusDBAdapter.CREATION_DATE_COLUMN);
long mmc2index = focusCursor.getLong(FocusDBAdapter.KEY_ID_COLUMN);
ToDoItem newItem = new ToDoItem(task, new Date(created), mmc2index );
todoItems.add(0, newItem);
} while(focusCursor.moveToNext());
aa.notifyDataSetChanged();
focusCursor.moveToFirst();
myListView.setSelected(true);
findViewById(R.id.myListView).setSelection(0);
}
@Override
public boolean onCreateOptionsMenu (Menu menu) {
super.onCreateOptionsMenu(menu);
MenuItem Reports = menu.add(0, REPORTS, Menu.NONE, R.string.reports);
MenuItem Mission = menu.add(0, MISSION, Menu.NONE, R.string.mission);
MenuItem Cash_Count = menu.add(0, CASH_COUNT, Menu.NONE,
R.string.cash_count);
MenuItem Focus = menu.add(0, FOCUS, Menu.NONE, R.string.focus);
MenuItem Input = menu.add(0, INPUT, Menu.NONE, R.string.input);
MenuItem Setup = menu.add(0, SETUP, Menu.NONE, R.string.setup);
MenuItem Back_To_Start = menu.add(0, BACK_TO_START, Menu.NONE,
R.string.back_to_start);
MenuItem Add_New_Todo = menu.add(0, ADD_NEW_TODO, Menu.NONE,
R.string.add_new);
MenuItem Remove_Todo = menu.add(0, REMOVE_TODO, Menu.NONE,
R.string.remove);
// SubMenu subSetup = menu.addSubMenu(0,SETUP ,Menu.NONE,
R.string.setup);
// MenuItem submenuItem = subSetup.add(0, subSetupTitle, Menu.NONE,
"TITLE SCREEN");
// MenuItem submenuitem = subSetup.add(0, subSetupSetup, Menu.NONE,
"SETUP");
// itemAdd.setIcon(R.drawable.add_new_item);
// itemRem.setIcon(R.drawable.remove_item);
MenuItem Output = menu.add(0, OUTPUT, Menu.NONE, R.string.output );
return true;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo)
{ super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Selected To Do Item");
}// menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove); }
private boolean addingNew = false;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
int idx = myListView.getSelectedItemPosition();
// String removeTitle = getString(addingNew ? R.string.cancel :
R.string.remove);
// MenuItem removeItem = menu.findItem(REMOVE_TODO);
// removeItem.setTitle(removeTitle);
// removeItem.setVisible(addingNew || idx > -1);
if (reports) { MenuItem Reports = menu.findItem(REPORTS);
Reports.setTitle(R.string.title_screen); }
else { MenuItem Reports = menu.findItem(REPORTS);
Reports.setTitle(R.string.reports); }
if (input) { MenuItem Input = menu.findItem(INPUT);
Input.setTitle(R.string.title_screen); }
else { MenuItem Input = menu.findItem(INPUT);
Input.setTitle(R.string.input); }
if (cash_count) { MenuItem Cash_count = menu.findItem(CASH_COUNT);
Cash_count.setTitle(R.string.title_screen); }
else { MenuItem Cash_count = menu.findItem(CASH_COUNT);
Cash_count.setTitle(R.string.cash_count); }
if (setup) { MenuItem Setup = menu.findItem(SETUP);
Setup.setTitle(R.string.title_screen); }
else { MenuItem Setup = menu.findItem(SETUP);
Setup.setTitle(R.string.setup); }
if (output) { MenuItem Output = menu.findItem(OUTPUT);
Output.setTitle(R.string.title_screen); }
else { MenuItem Output = menu.findItem(OUTPUT);
Output.setTitle(R.string.output); }
restoreMenu(menu);
if (mission) { clearMenu(menu); }
if (focus) { clearMenu(menu); }
return true;
}
public void clearMenu(Menu menu) {
MenuItem Reports = menu.findItem(REPORTS);
Reports.setVisible(false);
MenuItem Mission = menu.findItem(MISSION);
Mission.setVisible(false);
MenuItem Cash_count = menu.findItem(CASH_COUNT);
Cash_count.setVisible(false);
MenuItem Focus = menu.findItem(FOCUS);
Focus.setVisible(false);
MenuItem Input = menu.findItem(INPUT);
Input.setVisible(false);
MenuItem Setup = menu.findItem(SETUP);
Setup.setVisible(false);
MenuItem Output = menu.findItem(OUTPUT);
Output.setVisible(false);
MenuItem Add_New_Todo = menu.findItem(ADD_NEW_TODO);
Add_New_Todo.setVisible(true);
MenuItem Remove_Todo = menu.findItem(REMOVE_TODO);
Remove_Todo.setVisible(true);
MenuItem Back_To_Start = menu.findItem(BACK_TO_START);
Back_To_Start.setVisible(true);
}
public void restoreMenu(Menu menu) {
MenuItem Reports = menu.findItem(REPORTS);
Reports.setVisible(true);
MenuItem Mission = menu.findItem(MISSION);
Mission.setVisible(true);
MenuItem Cash_count = menu.findItem(CASH_COUNT);
Cash_count.setVisible(true);
MenuItem Focus = menu.findItem(FOCUS);
Focus.setVisible(true);
MenuItem Input = menu.findItem(INPUT);
Input.setVisible(true);
MenuItem Setup = menu.findItem(SETUP);
Setup.setVisible(true);
MenuItem Output = menu.findItem(OUTPUT);
Output.setVisible(true);
MenuItem Add_New_Todo = menu.findItem(ADD_NEW_TODO);
Add_New_Todo.setVisible(false);
MenuItem Remove_Todo = menu.findItem(REMOVE_TODO);
Remove_Todo.setVisible(false);
MenuItem Back_To_Start = menu.findItem(BACK_TO_START);
Back_To_Start.setVisible(false);
}
boolean reports = false;
boolean mission = false;
boolean input = false;
boolean cash_count = false;
boolean setup = false;
boolean output = false;
boolean focus = false;
boolean back_to_start = false;
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
super.onOptionsItemSelected(item);
//int index = myListView.getSelectedItemPosition();
switch(item.getItemId()) {
case(REMOVE_TODO): {
if (addingNew) { cancelAdd(); }
else {
new AlertDialog.Builder(this)
.setTitle("Remove Entry")
.setMessage("Are you sure ?")
.setPositiveButton("Remove", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dlg, int sumthin) {
if(mission) {
toDoListCursor.moveToPosition(todoItems.size() -
(myListView.getSelectedItemPosition()+1)); }
if(focus) {
focusCursor.moveToPosition(todoItems.size() -
(myListView.getSelectedItemPosition()+1)); }
int index = item.getItemId();
removeItem(index);
}
})
.setNegativeButton("Go Back", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dlg, int sumthin) { }
})
.show();
}
return true; }
case(ADD_NEW_TODO): {
addNewItem();
return true;
}
case(REPORTS): {
if (reports) {
setContentView(R.layout.title_page);
reports = false; }
else{ setContentView(R.layout.reports);
reports = true; mission = false; input = false;
cash_count = false; setup = false; output = false; }
return true;
}
case(MISSION): {
setContentView(R.layout.main);
TextView tv = (TextView)
this.findViewById(R.id.mission_focus_heading);
tv.setText(" BUSINESS MISSION STATEMENT");
focus = false;
mission = true;
{ myListView = (ListView)findViewById(R.id.myListView);
myEditText = (EditText)findViewById(R.id.myEditText);
todoItems = new ArrayList<ToDoItem>();
int resID = R.layout.todolist_item;
aa = new ToDoItemAdapter(this, resID, todoItems);
myListView.setAdapter(aa);
myEditText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN)
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
{ ToDoItem newItem;
newItem = new ToDoItem(myEditText.getText().toString());
toDoDBAdapter.insertTask(newItem);
updateArray();
myEditText.setText("");
aa.notifyDataSetChanged();
cancelAdd();
return true; }
return false;
}
});
registerForContextMenu(myListView);
// restoreUIState();
toDoDBAdapter = new ToDoDBAdapter(this);
toDoDBAdapter.open();
populateTodoList();
// setContentView(R.layout.main);
// setContentView(R.layout.title_page);
}
return true;
}
case(FOCUS): {
setContentView(R.layout.main);
TextView tv = (TextView)
this.findViewById(R.id.mission_focus_heading);
tv.setText(" CURRENT MANAGEMENT FOCUS");
focus = true;
mission = false;
{ myListView = (ListView)findViewById(R.id.myListView);
myEditText = (EditText)findViewById(R.id.myEditText);
todoItems = new ArrayList<ToDoItem>();
int resID = R.layout.todolist_item;
aa = new ToDoItemAdapter(this, resID, todoItems);
myListView.setAdapter(aa);
myEditText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN)
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
{ ToDoItem newItem;
newItem = new ToDoItem(myEditText.getText().toString());
focusDBAdapter.insertTask(newItem);
updateFocusArray();
myEditText.setText("");
aa.notifyDataSetChanged();
cancelAdd();
return true; }
return false;
}
});
registerForContextMenu(myListView);
// restoreUIState();
focusDBAdapter = new FocusDBAdapter(this);
focusDBAdapter.open();
populateFocusList();
// setContentView(R.layout.main);
// setContentView(R.layout.title_page);
focusCursor.moveToFirst();
myListView.requestFocus();
}
return true;
}
case(BACK_TO_START): {
setContentView(R.layout.title_page);
mission = false;
focus = false;
return true;
}
case(INPUT): {
if (input) {
setContentView(R.layout.title_page);
input = false; }
else{ setContentView(R.layout.input);
reports = false; mission = false; input = true;
cash_count = false; setup = false; output = false; }
return true;
}
case(CASH_COUNT): {
if (mission) {
setContentView(R.layout.title_page);
cash_count = false; }
else{ setContentView(R.layout.cash_count);
reports = false; mission = false; input = false;
cash_count = true; setup = false; output = false; }
return true;
}
case(SETUP): {
if (setup) {
setContentView(R.layout.title_page);
setup = false; }
else{ setContentView(R.layout.setup);
reports = false; mission = false; input = false;
cash_count = false; setup = true; output = false; }
return true;
}
case(OUTPUT): {
if (output) {
setContentView(R.layout.title_page);
output = false; }
else{ setContentView(R.layout.output);
reports = false; mission = false; input = false;
cash_count = false; setup = false; output = true; }
return true;
}
// case(subSetupTitle): {
// setContentView(R.layout.title_page);
// return true;
// }
// case(subSetupSetup): {
// setContentView(R.layout.setup);
// return true;
// }
}
return false;
}
@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
if (keyCode == KeyEvent.KEYCODE_MENU) {
myEditText.setVisibility(View.GONE);
myEditText.setText("");
if (mission) {
TextView tv = (TextView)findViewById(R.id.main_prompt_mission);
tv.setVisibility(View.GONE);; }
if (focus) {
TextView tv1 = (TextView)findViewById(R.id.main_prompt_focus );
tv1.setVisibility(View.GONE);; }
}
return false;
}
@Override
public boolean onContextItemSelected(MenuItem item) {
super.onContextItemSelected(item);
// switch (item.getItemId()) {
// case (REMOVE_TODO): {
// AdapterView.AdapterContextMenuInfo menuInfo;
// menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
// toDoListCursor.moveToPosition(todoItems.size() -
((menuInfo.position)+1));
// int index = item.getItemId();
// removeItem(index);
// return true;
// }
// }
return false;
}
private void cancelAdd() {
addingNew = false;
myEditText.setVisibility(View.GONE);
TextView tv = (TextView) this.findViewById(R.id.main_prompt_mission);
tv.setVisibility(View.GONE);
TextView tv1 = (TextView) this.findViewById(R.id.main_prompt_focus);
tv1.setVisibility(View.GONE);
// toDoListCursor.moveToFirst();
}
private void addNewItem() {
addingNew = true;
myEditText.setVisibility(View.VISIBLE);
if (mission) {
TextView tv = (TextView) this.findViewById(R.id.main_prompt_mission);
tv.setVisibility(View.VISIBLE); }
if (focus) {
TextView tv = (TextView)
this.findViewById(R.id.main_prompt_focus);
tv.setVisibility(View.VISIBLE); }
myEditText.requestFocus();
// toDoListCursor.moveToFirst();
}
private long removeItem( int index) {
if (mission) {
String task =
toDoListCursor.getString(ToDoDBAdapter.TASK_COLUMN);
long created = toDoListCursor.getLong(ToDoDBAdapter.CREATION_DATE_COLUMN);
long mmc2index = toDoListCursor.getLong(ToDoDBAdapter.KEY_ID_COLUMN);
ToDoItem TDI = new ToDoItem(task, new Date (created), mmc2index);
long mmc3index = TDI.getID();
toDoDBAdapter.removeTask(mmc3index);
updateArray();
}
if (focus) {
String task =
focusCursor.getString(FocusDBAdapter.TASK_COLUMN);
long created =
focusCursor.getLong(FocusDBAdapter.CREATION_DATE_COLUMN);
long mmc2index = focusCursor.getLong(FocusDBAdapter.KEY_ID_COLUMN);
ToDoItem TDI = new ToDoItem(task, new Date (created), mmc2index);
long mmc3index = TDI.getID();
focusDBAdapter.removeTask(mmc3index);
updateFocusArray();
}
return index;
}
}
----- Original Message -----
From: "Sean Hodges" <[email protected]>
To: <[email protected]>
Sent: Monday, June 01, 2009 3:20 AM
Subject: [android-beginners] Re: Setting Focus by code in an array list
>
> Hello Mike,
>
> I'm not familiar with the code you are using, but I believe you want
> to use setSelection() inside the "onCreate" method of the activity,
> something like:
>
> findViewById(R.id.myListView).setSelection(0);
>
> See here for more info:
> http://developer.android.com/reference/android/widget/ListView.html#setSelection%28int%29
>
> If you're still struggling, post up the activity code so we can better
> see what it is you are trying to do.
>
>
> Regards,
>
> Sean
>
>
> On Mon, Jun 1, 2009 at 10:19 AM, MMC2 <[email protected]> wrote:
>>
>> I am writing an app that is partly based on the ToDo Item example in
>> the book "Professional Android Application Development by Reto Meier.
>> I have an array list that lists data stored in a database. What I
>> would like, is to be able to set the focus automatically to the first
>> item by code when the list loads. The way things are at present, if I
>> try to remove an item without manually highlighting it first, I get an
>> error. Help please?
>> >
>>
>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Beginners" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en
-~----------~----~----~----~------~----~------~--~---