I am loading data in a view having 3 rows(LinearLayout) with each row having 3 TextView, and updating the same view if the focus is on last TextView of a row and KeyEvent.KEYCODE_DPAD_RIGHT.
I am able to update the view on KeyEvent.KEYCODE_DPAD_RIGHT but the focus is not coming back to the same row of the updated view.
Question: When the View is updated i want the focus to remain in the same row of the updated view,
. . .
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/linearlayout03" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="74dp"
android:background="@drawable/background" >
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="fill_parent"
android:layout_height="74dp"
android:background="@drawable/background" >
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="fill_parent"
android:layout_height="74dp"
android:background="@drawable/background" >
</LinearLayout>
</LinearLayout>
. . .
to fill the rows of linear layout
public void listfill(final LinearLayout ll, CustTextView[] tv, final List<Eventinfo> name, final int curf) {
final List<Eventinfo> nameref = name;
ll.removeAllViews();
if (name.size() == 0) {
name.add(new Eventinfo(true));
name.add(new Eventinfo(true));
name.add(new Eventinfo(true));
}
tv = new CustTextView[name.size()];
for (int i = 0; i < name.size(); i++) {
final Eventinfo evinfo = name.get(i);
Utils.println("ev info: "+evinfo);
tv[i] = new CustTextView(getApplicationContext());
LinearLayout.LayoutParams params2;
if (i != (name.size()-1)){
int x = 0;
if (i == 0){
tv[i].setViewLeft(true);
if (!name.get(0).isEmpty)
x = (int) calwidth(name.get(0).getEtime());
else
x = (int) calwidth(name.get(0).getDur() + 0);
}else
x = (int) calwidth(name.get(i).getDur() + 0);
params2 = new LinearLayout.LayoutParams(
(int) x, 74);
}
else{
tv[i].setViewRight(true);
params2 = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 74);
}
tv[i].setLayoutParams(params2);
tv[i].setText(name.get(i).getName());
tv[i].setTextColor(Color.WHITE);
System.out.println(" .... " + name.get(i).getName() + i);
final int z = i;
tv[i].setOnFocusChangeListener(new methodOnFocusinlistfill(i, curf, nameref.get(i), tv[i].getisViewRight(), tv[i].getisViewLeft()));
tv[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(z == 0){
String url = proxy.getUrl(gevinfo.getCid());
// call the tune channel API..
mediaPlayer.tune(url);
}
}
});
ll.addView(tv[i]);
}
}
the above method is called to fill(Update) view on key event given below
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (( cur_focus == 8 || cur_focus == 9 || cur_focus == 10 ) && newRight //to check if it is the last textview){
stTime.add(Calendar.HOUR,1);
stTime.add(Calendar.MINUTE,30);
enTime.add(Calendar.HOUR,1);
enTime.add(Calendar.MINUTE,30);
getStimeAndEtime();// will gives the start and end time
getEventinforclist();// based on start and end time it will get the data for the respective time duration and calls fill layout to update the view
}
Please help and thanks in advance.
Try calling the requestFocus method on the view.
For this method to work, your view need to be focusable. set the focusable property of the view to true in xml or programatically.