问题:
小弟写了一个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<>(); //弹出的窗体的数据
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;
}
//初始化弹出窗体中的数据
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是异步吧