/*
* The MIT License (MIT)
*
* Copyright (c) 2014-2015 Umeng, Inc
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.umeng.comm.ui.fragments;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.umeng.comm.core.beans.Topic;
import com.umeng.comm.core.utils.ResFinder;
import com.umeng.comm.ui.adapters.TopicPickerAdater;
import com.umeng.comm.ui.adapters.viewholders.FriendItemViewHolder;
import com.umeng.comm.ui.mvpview.MvpRecommendTopicView;
import com.umeng.comm.ui.presenter.impl.TopicFgPresenter;
import com.umeng.comm.ui.widgets.RefreshLayout.OnLoadListener;
import com.umeng.comm.ui.widgets.RefreshLvLayout;
/**
* 用户发布feed时的话题选择fragment.
*/
public class TopicPickerFragment extends BaseFragment<List<Topic>, TopicFgPresenter> implements
MvpRecommendTopicView {
/**
* 下来刷新布局
*/
RefreshLvLayout mRefreshLvLayout;
/**
* 显示选择话题的ListView
*/
private ListView mTopicListView;
/**
* 选择话题的适配器
*/
private TopicPickerAdater mAdapter;
/**
* 已经选择的话题
*/
private List<Topic> mSelectedTopics = new ArrayList<Topic>();
/**
* 话题被选中后,点击确认的回调
*/
private ResultListener<Topic> mTopicListener;
@Override
protected int getFragmentLayout() {
return ResFinder.getLayout("umeng_comm_topic_select");
}
@Override
protected TopicFgPresenter createPresenters() {
return new TopicFgPresenter(this);
}
@Override
protected void initWidgets() {
int refreshResId = ResFinder.getId("umeng_comm_topic_lv_layout");
int topicListViewResId = ResFinder.getId("umeng_comm_topic_listview");
mRefreshLvLayout = (RefreshLvLayout) mRootView.findViewById(refreshResId);
mRefreshLvLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh() {
mPresenter.loadDataFromServer();
}
});
mRefreshLvLayout.setOnLoadListener(new OnLoadListener() {
@Override
public void onLoad() {
loadMore();
}
});
mTopicListView = mRefreshLvLayout.findRefreshViewById(topicListViewResId);
// mTopicListView = (ListView)
// mRootView.findViewById(topicListViewResId);
mTopicListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 对于原来的值取反
setItemSelected(view, position);
}
});
mSelectedTopics.clear();
mAdapter = new TopicPickerAdater(getActivity());
mRefreshLvLayout.setAdapter(mAdapter);
}
/**
* 根据url加载更多话题</br>
*/
private void loadMore() {
List<Topic> topics = mAdapter.getDataSource();
if (topics.size() <= 0) {
mRefreshLvLayout.setLoading(false);
return;
}
mPresenter.loadMoreData();
}
/**
* 某个话题被选中,执行回调,更新TextView的显示
*
* @param isSelected
*/
private void setItemSelected(View itemView, int position) {
FriendItemViewHolder viewHolder = (FriendItemViewHolder) itemView.getTag();
if (viewHolder == null) {
return;
}
Topic topicItem = mAdapter.getItem(position);
// 对上一次是否含有该项进行取反,即原来没有选中的,那么点击该项以后就变为选选中状态了.
boolean isChecked = !mSelectedTopics.contains(topicItem);
// viewHolder.mCheckBox.setChecked(isChecked);
if (isChecked) {
mSelectedTopics.add(topicItem);
mTopicListener.onAdd(topicItem);
} else {
mSelectedTopics.remove(topicItem);
mTopicListener.onRemove(topicItem);
}
}
/**
* 取消选中的话题
*
* @param topic
*/
public void uncheckTopic(Topic topic) {
Iterator<Topic> iterator = mSelectedTopics.iterator();
while (iterator.hasNext()) {
Topic item = iterator.next();
if (item.equals(topic)) {
item.isFocused = false;
iterator.remove();
mAdapter.notifyDataSetChanged();
break;
}
}
}
/**
* 设置话题被选择后的回调(点击确认按钮执行该回调)
*
* @param listener
*/
public void addTopicListener(ResultListener<Topic> listener) {
mTopicListener = listener;
}
@Override
public List<Topic> getBindDataSource() {
return mAdapter.getDataSource();
}
@Override
public void notifyDataSetChanged() {
mAdapter.notifyDataSetChanged();
}
@Override
public void onRefreshStart() {
mRefreshLvLayout.setRefreshing(true);
}
@Override
public void onRefreshEnd() {
mRefreshLvLayout.setRefreshing(false);
mRefreshLvLayout.setLoading(false);
}
public static interface ResultListener<T> {
public void onAdd(T t);
public void onRemove(T t);
}
@Override
public void onRefreshEndNoOP() {
}
}