private static final int MSG_UPDATE_ITEM_TIME =
2;
private List<Event> eventList =
new ArrayList<>();
private HashMap<Integer, String> eventMap =
new HashMap<>();
private Handler mHandler =
new Handler(
new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case MSG_UPDATE_ITEM_TIME:
int position = msg.arg1;
String time = eventMap.get(position);
Event ev = eventList.get(position);
ev.setStarttime(time);
eventList.set(position, ev);
break;
}
return false;
}
});
private class EventListAdapter extends BaseAdapter {
@Override
public int getCount() {
return eventList.size();
}
@Override
public Object
getItem(
int position) {
return eventList.get(position);
}
@Override
public long getItemId(
int position) {
return position;
}
@Override
public View
getView(
final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView ==
null) {
viewHolder =
new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.event_list_item_layout,
null);
viewHolder.relative_time = (RelativeLayout) convertView.findViewById(R.id.relative_time);
viewHolder.tv_event_time = (TextView) convertView.findViewById(R.id.tv_event_time);
viewHolder.iv_arrow = (ImageView) convertView.findViewById(R.id.iv_arrow);
viewHolder.et_event = (EditText) convertView.findViewById(R.id.et_event);
viewHolder.et_event.setTag(position);
viewHolder.et_event.addTextChangedListener(
new MyTextChangeListener(viewHolder));
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.et_event.setTag(position);
}
Event event = eventList.get(position);
viewHolder.relative_time.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolder.iv_arrow.setBackgroundResource(R.drawable.selected);
final ListPopupWindow mPopup =
new ListPopupWindow(mContext);
final String time[] = getResources().getStringArray(R.array.time);
ArrayAdapter adapter =
new ArrayAdapter(mContext, android.R.layout.simple_list_item_1, time);
mPopup.setAdapter(adapter);
mPopup.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT);
mPopup.setHeight(
550);
mPopup.setModal(
true);
mPopup.setOnDismissListener(
new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
viewHolder.iv_arrow.setBackgroundResource(R.drawable.normal);
eventMap.put(position, viewHolder.tv_event_time.getText().toString());
Message msg =
new Message();
msg.what = MSG_UPDATE_ITEM_TIME;
msg.arg1 = position;
mHandler.sendMessage(msg);
}
});
mPopup.setAnchorView(viewHolder.relative_time);
mPopup.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view,
int position,
long id) {
viewHolder.tv_event_time.setText(time[position]);
mPopup.dismiss();
viewHolder.iv_arrow.setBackgroundResource(R.drawable.normal);
}
});
mPopup.show();
}
});
viewHolder.tv_event_time.setText(event.getStarttime());
viewHolder.et_event.setText(event.getTitle());
return convertView;
}
private class ViewHolder {
RelativeLayout relative_time;
TextView tv_event_time;
ImageView iv_arrow;
EditText et_event;
}
private class MyTextChangeListener implements TextWatcher {
private ViewHolder holder;
public MyTextChangeListener(ViewHolder holder) {
this.holder = holder;
}
@Override
public void afterTextChanged(Editable s) {
int position = (Integer) holder.et_event.getTag();
Event event = eventList.get(position);
event.setTitle(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s,
int start,
int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s,
int start,
int before,
int count) {
}
}
}
event_list_item_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="60dp">
<RelativeLayout
android:id="@+id/relative_time"
android:layout_width="91.67dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_event_time"
android:layout_width="50dp"
android:layout_height="19dp"
android:layout_centerInParent="true"
android:text="11:30"
android:textColor="#000000"
android:textSize="16sp" />
<ImageView
android:id="@+id/iv_arrow"
android:layout_width="10dp"
android:layout_height="5dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/normal" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@id/tv_event_time"
android:layout_marginTop="15dp"
android:background="#C8C8C8" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/relative_time"
android:layout_marginLeft="21.67dp"
android:layout_toRightOf="@+id/relative_time">
<EditText
android:id="@+id/et_event"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:text="和朋友吃饭"
android:singleLine="true"
android:textColor="#000000"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@id/et_event"
android:layout_marginTop="6.67dp"
android:background="#C8C8C8" />
</RelativeLayout>
</RelativeLayout>
R.array.time
<
string-array
name=
"time">
<
item>
1:
00</
item>
<
item>
1:
30</
item>
<
item>
2:
00</
item>
<
item>
2:
30</
item>
<
item>
3:
00</
item>
<
item>
3:
30</
item>
<
item>
4:
00</
item>
<
item>
4:
30</
item>
<
item>
5:
00</
item>
<
item>
5:
30</
item>
<
item>
6:
00</
item>
<
item>
6:
30</
item>
<
item>
7:
00</
item>
<
item>
7:
30</
item>
<
item>
8:
00</
item>
<
item>
8:
30</
item>
<
item>
9:
00</
item>
<
item>
9:
30</
item>
<
item>
10:
00</
item>
<
item>
10:
30</
item>
<
item>
11:
00</
item>
<
item>
11:
30</
item>
<
item>
12:
00</
item>
<
item>
12:
30</
item>
<
item>
13:
00</
item>
<
item>
13:
30</
item>
<
item>
14:
00</
item>
<
item>
14:
30</
item>
<
item>
15:
00</
item>
<
item>
15:
30</
item>
<
item>
16:
00</
item>
<
item>
16:
30</
item>
<
item>
17:
00</
item>
<
item>
17:
30</
item>
<
item>
18:
00</
item>
<
item>
18:
30</
item>
<
item>
19:
00</
item>
<
item>
19:
30</
item>
<
item>
20:
00</
item>
<
item>
20:
30</
item>
<
item>
21:
00</
item>
<
item>
21:
30</
item>
<
item>
22:
00</
item>
<
item>
22:
30</
item>
<
item>
23:
00</
item>
<
item>
23:
30</
item>
<
item>
24:
00</
item>
</
string-array>