Sean,
Thanks for your reply and for being prepared to look further at my
problem. I tried your suggestion but it didn't work. It raises an error that
says " The method setSelection(int) is undefined for the type View ". It
suggested changing it to setSelected but that is not working either. What I
want to happen is that at the beginning, and after new entries are added or
entries removed, the first entry is highlighted similar to if I used the up
and down keys on the d pad to highlight the required entry. Not only is the
entry not being highlighted, but after additions or removals the pointer is
still pointing to where it was despite my " focusCursor.moveToFirst();"
This means that say for instance you manually move down to the third item,
and then remove an item, when you come back to the list, nothing is
highlighted, but when you press the down button once, the third item becomes
highlighted.
I have marked the on create method and also the update focus array
method which is where I would like to be able to sit the code. I have got
arrows pointing to where I have tinkered with each of these methods. By the
way the word "focus" in my method has nothing to do with the meaning of
focus in this instance.
Regards
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. */ON CREATE 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(){UPDATE FOCUS ARRAY
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"); // itemAd!
d.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 tru!
e; } 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);
Menu!
Item 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(i!
tem); //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); myEd
itText = (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 = (T!
extView)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.setVisibil
ity(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 AMSubject:
[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 i
s 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
-~----------~----~----~----~------~----~------~--~---