Reputation: 1719
In my android application , i have three pages A,B,C.All the three pages have table layout.If i person clicks on a particular row other page related to that row will display. Now what i require is if a person clicks on back after the second page,I need to focus the row which he had clicked in the first page on his return. Can i do this in android Please reply your valuable suggestions.
My code after Totramonhave suggested is.
Here in amy code i am generating rows dynamically.
public void onClick(View v) {
// TODO Auto-generated method stub
flag=v.getId();
if(v.getId()==1)
{
Intent i = new Intent(TableImageLayout.this, TableImageLayout3.class);
startActivity(i);
}
if(v.getId()==3)
{
Intent i = new Intent(TableImageLayout.this, TableImageLayout3.class);
startActivity(i);
}
if(v.getId()==5)
{
Intent i = new Intent(TableImageLayout.this, TableImageLayout3.class);
startActivity(i);
}
if(v.getId()==7)
{
Intent i = new Intent(TableImageLayout.this, TableImageLayout3.class);
startActivity(i);
}
if(v.getId()==100)
{
Intent i = new Intent(TableImageLayout.this, TableImageLayout3.class);
startActivity(i);
}
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if(hasFocus)
{
((TableRow)v).setBackgroundColor(Color.rgb(255, 180, 40));
}
else
{((TableRow)v).setBackgroundColor(Color.BLACK);}
}
protected void onResume() {
super.onResume();
tr[flag].requestFocus();
tr[flag].setFocusableInTouchMode(true);
if(tr[flag].hasFocus())
{
tr[flag].setBackgroundColor(Color.rgb(255, 180, 40));
}
else
{tr[flag].setBackgroundColor(Color.BLACK);}
}
@Override
public void onPause() {
super.onPause();
}
Thanks in advance :)
Upvotes: 4
Views: 9750
Reputation: 1075
There are many ways to do this. I assume A, B, C and the page to start (D) are all Activities. You could store the selection, say in activity B, in a member variable before starting the sub activity D (for example in onPause()
), and restore focus when control returns to B's onResume()
. Or you could give the parameter to D in the intent's extras, or the requestCode
parameter to startActivityForResult()
and return the same value from D by a call to setResult()
, which you'll receive to B's onActivityResult()
.
onPause is called automatically when an Activity halts, and is often the place where you want to save something before giving up control. This happens after you have started activity D, but before it is brought to front. You only need to implement the function in your activity:
public void onPause() {
// set the member variable somehow
super.onPause();
}
Although, it probably makes more sense to save the clicked row immediately in the row's onClick or onItemSelected event, or wherever you start the sub activity.
onResume is also called automatically when returning from the sub activity, all you need to do is implement it.
public void onResume() {
requestFocus(mSavedRow);
super.onResume();
}
Upvotes: 0
Reputation: 22920
You can try this
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode==KeyEvent.KEYCODE_BACK)
{
//Your code here
}
}
Upvotes: 5