问题
I am using two list-view's list_A and list_B with same number of list items as shown in figure 1, where in list_B is custom array adapter with each item as list(string) creating the button dynamically of required width.
public class LarrayAdapter extends ArrayAdapter<List<String>> {
private final Context context;
private List<List<String>> list;
public LarrayAdapter(Context context, List<List<String>> list) {
super(context, R.layout.hrowlayout, list);
this.context = context;
this.list = list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
HorizontalScrollView sv = (HorizontalScrollView) inflater.inflate(
R.layout.hrowlayout, parent, false);
LinearLayout rl1 = (LinearLayout) sv.findViewById(R.id.ll);
List<String> name2 = list.get(position);
final Button[] b = new Button[name2.size()];
float x;
for (int i = 0; i < name2.size(); i++) {
b[i] = new Button(rl1.getContext());
b[i].setGravity(Gravity.CENTER);
b[i].setBackgroundResource(R.drawable.bakground_list);
b[i].setSingleLine(true);
String einfo = name2.get(i);
String[] einfosplit = einfo.split("-",2);
x = calwidth(Integer.parseInt(einfosplit[1]));
LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams((int) x, 80);
params2.topMargin = 15;
b[i].setTextSize(18);
b[i].setTextColor(Color.WHITE);
b[i].setText(einfosplit[0]);
b[i].setLayoutParams(params2);
final int z = i;
b[i].setOnFocusChangeListener(new View.OnFocusChangeListener(){
@Override
public void onFocusChange(View v, boolean hasFocus){
if(hasFocus){
b[z].setTextColor(0xff7BCFFC);
}
else
b[z].setTextColor(Color.WHITE);
}
} );
rl1.addView(b[i],params2);
}
sv.scrollTo(0, 0);
return sv;
}
public int calwidth(int dur){
return (253/3)*dur;
}
}
Problem facing: when navigated from list_A to list_B, i want to set focus of list_B to same position of list_A item, to do this i am using
list_B.setSelection(list_A_cur);//list_A_cur gives position of list_A focused item
list_B.setFocusable(true);
list_B.requestFocus();
list_B item gets focus correctly as shown in figure 1, but item looses focus after some time and returns back to the first item every time as shown in figure 2, please help ...thank you,
figure 1
figure 2
来源:https://stackoverflow.com/questions/16476179/android-dynamic-listview-focus-returning-to-first-item-every-time-after-loosing