1

リストビューがあり、BaseAdapterを設定していますが、行レイアウトにはテキストビューしかありません。

ビューオブジェクトを使用して前のテキストビューを追跡していますが、リストビュービューをスクロールすると、previoustextviewobjが機能しません。

以前に選択された子ビューを知る方法。

public View getView(final int position, final View convertView, final ViewGroup parent) {
        TextView txtview = (TextView) convertView;            
        boolean flag = false;
        final Resources res = getResources();
        final Drawable actbtnDoneDraw = res.getDrawable(R.drawable.action_done_button);
        final Drawable actbtnSelectedDraw = res.getDrawable(R.drawable.action_button_selected);
        final Drawable actbtnDraw = res.getDrawable(R.drawable.action_button);

        if (null == convertView) {

                if (DeviceDetail.isGalaxyTabOriginal()) {
                    txtview = (TextView) inflater.inflate(R.layout.list_txtview_gtab0, parent,
                            true);
                } else {

                    txtview = (TextView) inflater.inflate(R.layout.list_txtview, parent, false);

                }

            } else {
                txtview = (TextView) convertView;
                if (selectedposition != position) {
                    txtview.setBackgroundDrawable(actbtnDraw);
                    txtview.setSelected(false);

                } else {

                    txtview.setBackgroundDrawable(actbtnSelectedDraw);
                    txtview.setSelected(true);

                }
            }
            final Activity activity = activities.get(position);
            txtview.setText(activity.name);
            txtview.setTag(Integer.valueOf(activity.id));

            txtview.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(final View v) {
                    selectedposition = position;
                    Log.i("Onclick position = " + position);
                    modifyButtonView(v, position);
                }
            });

        }

public void modifyButtonView(final View view, final int position) {

        final TextView v = (TextView) view;
        final TextView pv = (TextView) previousview;

        final Resources res = getResources();
        final Drawable actbtnSelectedDraw = res.getDrawable(R.drawable.action_button_selected);
        final Drawable actbtnDraw = res.getDrawable(R.drawable.action_button);



        if (NoSelection) {
            v.setSelected(true);
            v.setBackgroundDrawable(actbtnSelectedDraw);


        } else {
            if (previousposition != position) {

                v.setSelected(true);
                pv.setBackgroundDrawable(actbtnDraw);
                v.setBackgroundDrawable(actbtnSelectedDraw);
                pv.setSelected(false);
            }
        }            

        previousview = v;
        previousposition = position;
        NoSelection = false;
        mListener.onActivityButtonClicked(v);
    }
}
4

2 に答える 2

0

以前に選択された子ビューを知る方法。

2つのフィールド変数をAdapterクラスに追加し、それらpublic int previousChoiceをとと呼びますcurrentChoiceonItemClick()orメソッド内で、onListItemClick()この値を3番目のパラメーターで更新します position

mAdapter.previousChoice = mAdapter.currentChoice;
mAdapter.currentChoice = position;
于 2012-12-26T23:09:08.680 に答える
0

//位置に応じて、前のビューを取得します.... method(view、position)

            final int wantedPosition = previousposition;
            final int firstPosition = listview.getFirstVisiblePosition()
                    - listview.getHeaderViewsCount();
            final int wantedChild = wantedPosition - firstPosition;
            if (!(wantedChild > firstPosition && wantedPosition < listview
                    .getLastVisiblePosition())) {

//textviewが行ビューとしてのみ存在する場合

                pv = (TextView) listview.getChildAt(wantedChild);
                if (pv == null) {
                    pv = (TextView) previousview;
                }
            }
            if (previousposition != position) {
                // perform the operation on the pv view or current v view
            }
        }
        previousview = v;
        previousposition = position;            
于 2012-12-27T17:31:25.640 に答える