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>