2

図1に示すように、2つのリストビューのlist_Aとlist_Bを同じ数のリストアイテムで使用しています。ここで、list_Bは各アイテムをリスト(文字列)として持つカスタム配列アダプターで、必要な幅のボタンを動的に作成します。

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;
}
}

直面している問題: list_A から list_B に移動するとき、list_B のフォーカスを list_A アイテムの同じ位置に設定したいので、これを行うために使用しています

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 アイテムは図 1 に示すように正しくフォーカスを取得しますが、アイテムはしばらくするとフォーカスを失い、図 2 に示すように毎回最初のアイテムに戻ります。

ここに画像の説明を入力 図1

ここに画像の説明を入力 図2

4

0 に答える 0