在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  Android/ ListView中的TextView嵌套PopupWindow,TextView

ListView中的TextView嵌套PopupWindow,TextView無法修改

問題:
小弟寫了一個ListView,ListView的item中有一個是TextView。當我點擊TextView的時候,會彈出一個PopupWindow。PopupWindow中是一個ListView。

當點擊PopupWindow中的ListView的時候,需要把 PopupWindow中的ListView的值傳給TextView。問題是,我debug,看見了TextView的值明明改變了,但是在頁面中的TextView的值卻沒有改變

代碼:

ListView中的適配器

public class OperatorLogItem extends BaseAdapter {


    private Context mcontext;
    private LayoutInflater mInflater;
    private TextView tv_operator_mark;
    private PopupWindow pw_operator_mark;   // 彈框
    private List<String> mOperatorMarkList = new ArrayList<>(); //彈出的窗體的數(shù)據(jù)
    private AddItemListView mAddItemListView;
    private  AddItemListViewAdapter mAddItemListViewAdapter;

    Spinner mSpOperatorMark ,mSpOperatorRecord,mSpOperatorSignature;

    EditText etOperatorAllTime, etOperatorBeginTime, etOperatorOverTime,etOperatorRemark;

    public OperatorLogItem(Context context) {
        super();
        this.mcontext = context;
        this.mInflater = LayoutInflater.from(mcontext);
        // 因為多個OperatorLogItem 共用一個 ListView,所以只初始化一次。
        initTvClickPopupWindowData(mOperatorMarkList);
        mAddItemListView = new AddItemListView(mcontext);
        mAddItemListViewAdapter = new AddItemListViewAdapter(mcontext,mOperatorMarkList);
        mAddItemListView.setAdapter(mAddItemListViewAdapter);
    }

    @Override
    public int getCount() {
        return 8;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = mInflater.inflate(R.layout.lv_item_log,null);
        // 修改部分
        tv_operator_mark = (TextView) v.findViewById(R.id.tv_operator_mark);
        tv_operator_mark.setText(mOperatorMarkList.get(0));
        initTvClickPopupWindow(tv_operator_mark);
        //  mSpOperatorMark = (Spinner) v.findViewById(R.id.sp_operator_mark);
        mSpOperatorRecord = (Spinner) v.findViewById(R.id.sp_operator_record);
        mSpOperatorSignature = (Spinner) v.findViewById(R.id.sp_operator_signature);

//            mSpOperatorMark.setAdapter(ArrayAdapter.createFromResource(MainActivity.this,R.array.operatorLogMark,R.layout.multiline_spinner_dropdown_item));
        mSpOperatorRecord.setAdapter(ArrayAdapter.createFromResource(mcontext,R.array.operatorLogRecord,R.layout.multiline_spinner_dropdown_item));
        mSpOperatorSignature.setAdapter(ArrayAdapter.createFromResource(mcontext,R.array.operatorLogSignature,R.layout.multiline_spinner_dropdown_item));

        etOperatorAllTime = (EditText) v.findViewById(R.id.et_operator_all_time);
        etOperatorBeginTime = (EditText) v.findViewById(R.id.et_operator_begin_time);
        etOperatorOverTime = (EditText) v.findViewById(R.id.et_operator_over_time);
        etOperatorRemark = (EditText) v.findViewById(R.id.et_operator_remark);
        return v;
    }

    //初始化彈出窗體中的數(shù)據(jù)
    private void initTvClickPopupWindowData(List<String> list) {
        String [] arrays = mcontext.getResources().getStringArray(R.array.operatorLogMark);
        if(arrays != null) {
            for (String s : arrays) {
                list.add(s);
            }
        }
    }

    //初始化點擊TextView 彈出窗體
    private void initTvClickPopupWindow(TextView tv) {
        //初始化窗體
        tv.post(new Runnable() {
            @Override
            public void run() {
                pw_operator_mark = new PopupWindow(mAddItemListView, RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT,true);
                pw_operator_mark.setTouchable(true);
                pw_operator_mark.setOutsideTouchable(true);
                // 這句話是必須寫的,雖然不知道為什么??!
                pw_operator_mark.setBackgroundDrawable(new BitmapDrawable(mcontext.getResources(), (Bitmap) null));
            }
        });
        // 點擊彈出窗體
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pw_operator_mark.showAsDropDown(v);
            }
        });
    }

PopupWindow中ListView的適配器

 class AddItemListViewAdapter extends BaseAdapter {

        private Context mContext;
        private LayoutInflater mInflater;
        private List<String> data;

        public AddItemListViewAdapter(Context mContext, List<String> data) {
            this.mContext = mContext;
            mInflater = LayoutInflater.from(mContext);
            this.data = data;
        }


        @Override
        public int getCount() {
            return data.size();
        }

        @Override
        public Object getItem(int position) {
            return data.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View view, ViewGroup parent)     {
            ViewHolder vh;
            vh = new ViewHolder();
            view = mInflater.inflate(R.layout.item, null);
            vh.tvContent = (TextView) view.findViewById(R.id.tv_content);
            vh.tvDelete = (TextView) view.findViewById(R.id.tv_delete);
            vh.tvContent.setText(data.get(position));
            vh.tvDelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    data.remove(position);
                    notifyDataSetChanged();
                }
            });
            vh.tvContent.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                 tv_operator_mark.setText(data.get(position));
                    pw_operator_mark.dismiss();
                }
            });
            return view;
        }
    }
    static class ViewHolder {
        TextView tvContent;
        TextView tvDelete;
    }
回答
編輯回答
尛憇藌

pw_operator_mark怎么找到屬于自己的tv_operator_mark?tv.post是異步吧

2018年8月21日 19:58