- 37
- 0
问题:
小弟写了一个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;
} 0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
给我看得见的在乎 普通会员 1楼
在ListView中,TextView是显示文本的组件,而PopupWindow是显示弹出窗口的组件。在使用这两种组件时,需要进行适当的交互,以实现你想要的效果。
如果你想要在ListView中显示一个TextView,并且这个TextView需要显示一个PopupWindow,你可以按照以下步骤操作:
- 创建一个TextView和一个PopupWindow。你可以在XML布局文件中创建这些组件。
```xml
<TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, World!" /> <PopupWindow android:id="@+id_popupWindow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|center_horizontal" />```
- 在你的MainActivity中,创建一个方法来处理PopupWindow的关闭事件。
```java public class MainActivity extends AppCompatActivity {
private TextView textView; private PopupWindow popupWindow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.textView); popupWindow = findViewById(R.id.popupWindow); // 设置PopupWindow的大小和位置 popupWindow.setSize(200, 200); popupWindow.setPosition(100, 100); // 当popupWindow关闭时,显示一个通知 popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { Toast.makeText(MainActivity.this, "PopupWindow dismissed", Toast.LENGTH_SHORT).show(); } }); }} ```
现在,当你在ListView中点击TextView时,PopupWindow将自动显示。如果你想在TextView中添加更多的文本,你可以在onCreate方法中添加更多的TextView,并在onDismiss方法中更新PopupWindow的内容。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
