Skip to content

Commit

Permalink
重写搜索模块 WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
iMeiji committed Jun 15, 2017
1 parent 6890f2b commit 42067aa
Show file tree
Hide file tree
Showing 18 changed files with 2,105 additions and 17 deletions.
3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -109,4 +109,7 @@ dependencies {
debugCompile 'com.facebook.stetho:stetho:1.5.0'
testCompile 'junit:junit:4.12'
compile 'me.drakeet.multitype:multitype:3.0.0'
compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
compile 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.0.0'

}
5 changes: 5 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,11 @@
android:configChanges="orientation|screenSize|uiMode"
android:theme="@style/AppTheme.NoActionBar"/>

<activity
android:name=".module.search.wip.SearchActivity2"
android:configChanges="orientation|screenSize|uiMode"
android:theme="@style/AppTheme.NoActionBar"/>

</application>

</manifest>
17 changes: 11 additions & 6 deletions app/src/main/java/com/meiji/toutiao/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.meiji.toutiao.module.news.NewsTabLayout;
import com.meiji.toutiao.module.photo.PhotoTabLayout;
import com.meiji.toutiao.module.search.SearchActivity;
import com.meiji.toutiao.module.search.wip.SearchActivity2;
import com.meiji.toutiao.module.video.VideoTabLayout;
import com.meiji.toutiao.utils.SettingsUtil;
import com.meiji.toutiao.widget.helper.BottomNavigationViewHelper;
Expand Down Expand Up @@ -205,10 +206,18 @@ public void onBackPressed() {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_activity_main, menu);
setSearchView(menu);
// setSearchView(menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_search) {
startActivity(new Intent(MainActivity.this, SearchActivity2.class));
}
return super.onOptionsItemSelected(item);
}

private void setSearchView(final Menu menu) {
searchItem = menu.findItem(R.id.action_search);
// 关联检索配置与 SearchActivity
Expand All @@ -218,7 +227,7 @@ private void setSearchView(final Menu menu) {
new ComponentName(getApplicationContext(), SearchActivity.class));
searchView.setSearchableInfo(searchableInfo);
searchView.setQueryHint(getString(R.string.search_hint));
//searchItem.setActionView(searchView);
// searchItem.setActionView(searchView);

// 按一次返回键关闭searchView
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
Expand All @@ -236,17 +245,13 @@ public void onFocusChange(View view, boolean b) {
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when action item collapses
content_main.setVisibility(View.VISIBLE);
// menu.findItem(R.id.aciton_setting).setVisible(true);
// menu.findItem(R.id.action_switch_night_mode).setVisible(true);
return true; //Return true to collapse action view
}

@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when expanded
content_main.setVisibility(View.GONE);
// menu.findItem(R.id.aciton_setting).setVisible(false);
// menu.findItem(R.id.action_switch_night_mode).setVisible(false);
return true; // Return true to expand action view
}
});
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/java/com/meiji/toutiao/Register.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
import com.meiji.toutiao.bean.news.MultiNewsArticleDataBean;
import com.meiji.toutiao.bean.news.NewsCommentMobileBean;
import com.meiji.toutiao.bean.photo.PhotoArticleBean;
import com.meiji.toutiao.bean.search.SearchBean;
import com.meiji.toutiao.bean.video.VideoArticleBean;
import com.meiji.toutiao.bean.wenda.WendaArticleDataBean;
import com.meiji.toutiao.bean.wenda.WendaContentBean;
import com.meiji.toutiao.binder.FooterViewBinder;
import com.meiji.toutiao.binder.SearchViewBinder;
import com.meiji.toutiao.binder.joke.JokeCommentHeaderViewBinder;
import com.meiji.toutiao.binder.joke.JokeCommentViewBinder;
import com.meiji.toutiao.binder.joke.JokeContentViewBinder;
Expand Down Expand Up @@ -125,4 +127,9 @@ public static void registerWendaContentItem(MultiTypeAdapter adapter) {
public static void registerMediaChannelItem(MultiTypeAdapter adapter) {
adapter.register(MediaChannelBean.class, new MediaChannelViewBinder());
}

public static void registerSearchItem(MultiTypeAdapter adapter) {
adapter.register(SearchBean.DataBeanX.class, new SearchViewBinder());
adapter.register(FooterBean.class, new FooterViewBinder());
}
}
16 changes: 10 additions & 6 deletions app/src/main/java/com/meiji/toutiao/adapter/DiffCallback.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.meiji.toutiao.adapter;

import android.support.v7.util.DiffUtil;
import android.support.v7.widget.RecyclerView;

import com.meiji.toutiao.bean.joke.JokeCommentBean;
import com.meiji.toutiao.bean.joke.JokeContentBean;
Expand All @@ -9,14 +10,13 @@
import com.meiji.toutiao.bean.news.NewsArticleBean;
import com.meiji.toutiao.bean.news.NewsCommentMobileBean;
import com.meiji.toutiao.bean.photo.PhotoArticleBean;
import com.meiji.toutiao.bean.search.SearchBean;
import com.meiji.toutiao.bean.video.VideoArticleBean;
import com.meiji.toutiao.bean.wenda.WendaArticleDataBean;
import com.meiji.toutiao.bean.wenda.WendaContentBean;

import java.util.List;

import me.drakeet.multitype.MultiTypeAdapter;

/**
* Created by Meiji on 2017/4/18.
*/
Expand All @@ -33,6 +33,7 @@ public class DiffCallback extends DiffUtil.Callback {
public static final int MUlTI_NEWS = 7;
public static final int WENDA_ARTICLE = 8;
public static final int WENDA_CONTENT = 9;
public static final int SEARCH = 10;
private List oldList, newList;
private int type;

Expand All @@ -42,7 +43,7 @@ public DiffCallback(List oldList, List newList, int type) {
this.type = type;
}

public static void notifyDataSetChanged(List oldList, List newList, int type, MultiTypeAdapter adapter) {
public static void notifyDataSetChanged(List oldList, List newList, int type, RecyclerView.Adapter adapter) {
DiffCallback diffCallback = new DiffCallback(oldList, newList, type);
DiffUtil.DiffResult result = DiffUtil.calculateDiff(diffCallback, true);
result.dispatchUpdatesTo(adapter);
Expand Down Expand Up @@ -92,6 +93,9 @@ public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
case WENDA_CONTENT:
return ((WendaContentBean.AnsListBean) oldList.get(oldItemPosition)).getAnsid().equals(
((WendaContentBean.AnsListBean) newList.get(newItemPosition)).getAnsid());
case SEARCH:
return ((SearchBean.DataBeanX) oldList.get(oldItemPosition)).getTitle().equals(
((SearchBean.DataBeanX) newList.get(newItemPosition)).getTitle());
}
} catch (Exception e) {
// e.printStackTrace();
Expand Down Expand Up @@ -130,9 +134,9 @@ public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
case WENDA_ARTICLE:
return ((WendaArticleDataBean) oldList.get(oldItemPosition)).getQuestionBean().getContent().equals(
((WendaArticleDataBean) newList.get(newItemPosition)).getQuestionBean().getContent());
case WENDA_CONTENT:
return ((WendaContentBean.AnsListBean) oldList.get(oldItemPosition)).getAns_url().equals(
((WendaContentBean.AnsListBean) newList.get(newItemPosition)).getAns_url());
case SEARCH:
return ((SearchBean.DataBeanX) oldList.get(oldItemPosition)).getAbstractX().equals(
((SearchBean.DataBeanX) newList.get(newItemPosition)).getAbstractX());
}
} catch (Exception e) {
// e.printStackTrace();
Expand Down
38 changes: 38 additions & 0 deletions app/src/main/java/com/meiji/toutiao/api/IMobileSearchApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.meiji.toutiao.api;

import com.meiji.toutiao.bean.search.SearchBean;
import com.meiji.toutiao.bean.search.SearchSuggestionBean;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;

/**
* Created by Meiji on 2017/6/13.
*/

public interface IMobileSearchApi {

/**
* 获取搜索建议
* http://is.snssdk.com/2/article/search_sug/?keyword=3&from=search_tab&iid=10344168417&device_id=36394312781
*
* @param keyword 搜索内容
*/
@GET("http://is.snssdk.com/2/article/search_sug/?from=search_tab&iid=10344168417&device_id=36394312781")
Observable<SearchSuggestionBean> getSearchSuggestion(@Query("keyword") String keyword);

/**
* 获取搜索结果
* http://is.snssdk.com/api/2/wap/search_content/?from=search_tab&keyword=123&iid=10344168417&device_id=36394312781&count=10&cur_tab=1&format=json&offset=20
*
* @param keyword 搜索内容
* @param curTab 搜索栏目 1综合 2视频 3图集 4用户 5问答
* @param offset 偏移量
*/
@GET("http://is.snssdk.com/api/2/wap/search_content/?from=search_tab&iid=10344168417&device_id=36394312781&count=10&format=json")
Observable<SearchBean> getSearchArticle(
@Query("keyword") String keyword,
@Query("cur_tab") String curTab,
@Query("offset") int offset);
}
1,336 changes: 1,336 additions & 0 deletions app/src/main/java/com/meiji/toutiao/bean/search/SearchBean.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.meiji.toutiao.bean.search;

import java.util.List;

/**
* Created by Meiji on 2017/6/14.
*/

public class SearchSuggestionBean {
/**
* message : success
* data : [{"keyword":"6 18小米6"},{"keyword":"618小米手机"},{"keyword":"618京东"},{"keyword":"6 18"},{"keyword":"618手机"},{"keyword":"618京东节"},{"keyword":"618电商大战"},{"keyword":"618电商节"},{"keyword":"618大促"},{"keyword":"618手机排行榜"}]
*/

private String message;
private List<DataBean> data;

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public List<DataBean> getData() {
return data;
}

public void setData(List<DataBean> data) {
this.data = data;
}

public static class DataBean {
/**
* keyword : 6 18小米6
*/

private String keyword;

public String getKeyword() {
return keyword;
}

public void setKeyword(String keyword) {
this.keyword = keyword;
}
}
}
92 changes: 92 additions & 0 deletions app/src/main/java/com/meiji/toutiao/binder/SearchViewBinder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package com.meiji.toutiao.binder;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.meiji.toutiao.R;
import com.meiji.toutiao.bean.news.NewsArticleBean;
import com.meiji.toutiao.bean.search.SearchBean;
import com.meiji.toutiao.module.news.content.NewsContentActivity;
import com.meiji.toutiao.utils.ImageLoader;
import com.meiji.toutiao.utils.TimeUtil;
import com.meiji.toutiao.widget.CircleImageView;

import me.drakeet.multitype.ItemViewBinder;

/**
* Created by Meiji on 2017/6/13.
*/

public class SearchViewBinder extends ItemViewBinder<SearchBean.DataBeanX, SearchViewBinder.ViewHolder> {


@NonNull
@Override
protected SearchViewBinder.ViewHolder onCreateViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
View view = inflater.inflate(R.layout.item_news_article, parent, false);
return new ViewHolder(view);
}

@Override
protected void onBindViewHolder(@NonNull SearchViewBinder.ViewHolder holder, @NonNull final SearchBean.DataBeanX item) {
try {

if (item.getImage_list().size() > 0) {
String url = item.getImage_list().get(0).getUrl();
ImageLoader.loadCenterCrop(holder.itemView.getContext(), url, holder.iv_image, R.color.viewBackground);
}

String tv_title = item.getTitle();
String tv_abstract = item.getAbstractX();
String tv_source = item.getSource();
String tv_comment_count = item.getComment_count() + "评论";
String tv_datetime = item.getBehot_time() + "";
if (!TextUtils.isEmpty(tv_datetime)) {
tv_datetime = TimeUtil.getTimeStampAgo(tv_datetime);
}

holder.tv_title.setText(tv_title);
holder.tv_abstract.setText(tv_abstract);
holder.tv_extra.setText(tv_source + " - " + tv_comment_count + " - " + tv_datetime);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NewsArticleBean.DataBean dataBean = new NewsArticleBean.DataBean();
dataBean.setDisplay_url(item.getDisplay_url());
dataBean.setTitle(item.getTitle());
dataBean.setMedia_name(item.getMedia_name());
dataBean.setMedia_url(item.getMedia_url());
dataBean.setGroup_id(item.getGroup_id());
dataBean.setItem_id(item.getGroup_id());
NewsContentActivity.launch(dataBean);
}
});
} catch (Exception e) {

}
}

public class ViewHolder extends RecyclerView.ViewHolder {

private CircleImageView iv_media;
private ImageView iv_image;
private TextView tv_title;
private TextView tv_abstract;
private TextView tv_extra;

ViewHolder(View itemView) {
super(itemView);
this.iv_media = (CircleImageView) itemView.findViewById(R.id.iv_media);
this.iv_image = (ImageView) itemView.findViewById(R.id.iv_image);
this.tv_title = (TextView) itemView.findViewById(R.id.tv_title);
this.tv_abstract = (TextView) itemView.findViewById(R.id.tv_abstract);
this.tv_extra = (TextView) itemView.findViewById(R.id.tv_extra);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.util.DiffUtil;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
Expand Down Expand Up @@ -115,9 +114,7 @@ public void onLoadData() {
@Override
public void onSetAdapter(final List<?> list) {
List<MediaArticleBean.DataBean> oldList = adapter.getList();
DiffCallback diffCallback = new DiffCallback(oldList, list, DiffCallback.MEDIA);
DiffUtil.DiffResult result = DiffUtil.calculateDiff(diffCallback, true);
result.dispatchUpdatesTo(adapter);
DiffCallback.notifyDataSetChanged(oldList, list, DiffCallback.MEDIA, adapter);
adapter.setList((List<MediaArticleBean.DataBean>) list);
canLoadMore = true;
}
Expand Down
Loading

0 comments on commit 42067aa

Please sign in to comment.