Skip to content

Commit 6b0ea11

Browse files
committed
基本完成搜索功能(首页搜索UI位置还不确定)
1 parent c12cef3 commit 6b0ea11

18 files changed

+180
-60
lines changed

app/src/main/AndroidManifest.xml

+19-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
34
package="com.rae.cnblogs">
45

56

@@ -179,9 +180,9 @@
179180
android:launchMode="singleTop"
180181
android:windowSoftInputMode="stateHidden"/>
181182

182-
<!-- <activity
183-
android:name=".fragment.SearchFragment"
184-
android:windowSoftInputMode="adjustPan|stateVisible" />-->
183+
<activity
184+
android:name=".activity.SearchActivity"
185+
android:windowSoftInputMode="adjustPan|stateVisible"/>
185186

186187

187188
<meta-data
@@ -191,6 +192,21 @@
191192
android:name="UMENG_CHANNEL"
192193
android:value="${UMENG_CHANNEL}"/>
193194

195+
<!--开始-快速开发需要移除下面的多进程-->
196+
<service
197+
android:name="com.squareup.leakcanary.internal.HeapAnalyzerService"
198+
android:enabled="false"
199+
tools:remove="process"/>
200+
<service
201+
android:name="com.tencent.tinker.lib.service.TinkerPatchService"
202+
android:exported="false"
203+
tools:remove="process" />
204+
<service
205+
android:name="com.tencent.tinker.lib.service.TinkerPatchService$InnerService"
206+
android:exported="false"
207+
tools:remove="process"/>
208+
209+
<!--结束-快速开发需要移除下面的多进程-->
194210

195211
</application>
196212

app/src/main/assets/view.html

+6-2
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,13 @@
103103
var blog = app.getBlog();
104104
if(blog!=""){
105105
blog = $.parseJSON(blog);
106-
$("#blog_title").text(blog.title);
106+
$("#blog_title").html(blog.title);
107107
$("#blog_date").text(blog.postDate);
108-
$("#blog_content").append(blog.content);
108+
if(blog.content==null|| blog.content==""){
109+
$("#blog_content").append("<p>接口缺失正文内容,可能由于博客发布时间已经久远,接口任性就是没有返回数据。</p><p>你可以尝试点击下面阅读原文阅读,也可以点击右上方的更多按钮查看原文。</p><p><a href='"+blog.url +"' class='a-source'>【阅读原文】</a></p>");
110+
}else{
111+
$("#blog_content").append(blog.content);
112+
}
109113
}
110114
}
111115

app/src/main/java/com/rae/cnblogs/AppRoute.java

+26
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.rae.cnblogs.activity.FriendsActivity;
1616
import com.rae.cnblogs.activity.LoginActivity;
1717
import com.rae.cnblogs.activity.MainActivity;
18+
import com.rae.cnblogs.activity.SearchActivity;
1819
import com.rae.cnblogs.activity.SettingActivity;
1920
import com.rae.cnblogs.activity.WebActivity;
2021
import com.rae.cnblogs.activity.WebLoginActivity;
@@ -242,4 +243,29 @@ public static void jumpToFavorites(Activity context) {
242243
public static void jumpToSetting(Context context) {
243244
startActivity(context, SettingActivity.class);
244245
}
246+
247+
/**
248+
* 搜索
249+
*/
250+
public static void jumpToSearch(Context context) {
251+
startActivity(context, SearchActivity.class);
252+
}
253+
254+
/**
255+
* 搜索-新闻
256+
*/
257+
public static void jumpToSearchNews(Context context) {
258+
Intent intent = new Intent(context, SearchActivity.class);
259+
intent.putExtra("position", 2);
260+
startActivity(context, intent);
261+
}
262+
263+
/**
264+
* 搜索-知识库
265+
*/
266+
public static void jumpToSearchKb(Context context) {
267+
Intent intent = new Intent(context, SearchActivity.class);
268+
intent.putExtra("position", 3);
269+
startActivity(context, intent);
270+
}
245271
}

app/src/main/java/com/rae/cnblogs/adapter/BlogListItemAdapter.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.rae.cnblogs.RaeImageLoader;
1616
import com.rae.cnblogs.model.BlogItemViewHolder;
1717
import com.rae.cnblogs.model.ItemLoadingViewHolder;
18+
import com.rae.cnblogs.model.SimpleViewHolder;
1819
import com.rae.cnblogs.sdk.UserProvider;
1920
import com.rae.cnblogs.sdk.bean.BlogBean;
2021
import com.rae.cnblogs.sdk.bean.BlogType;
@@ -79,8 +80,10 @@ public int getItemViewType(int position) {
7980
return VIEW_TYPE_NORMAL;
8081
}
8182

83+
8284
@Override
8385
public RecyclerView.ViewHolder onCreateViewHolder(LayoutInflater inflater, ViewGroup parent, int viewType) {
86+
8487
if (viewType == VIEW_TYPE_LOADING) {
8588
return new ItemLoadingViewHolder(inflateView(parent, R.layout.item_list_loading));
8689
}
@@ -90,14 +93,15 @@ public RecyclerView.ViewHolder onCreateViewHolder(LayoutInflater inflater, ViewG
9093
if (viewType == VIEW_TYPE_NEWS) {
9194
return new BlogItemViewHolder(inflateView(parent, R.layout.item_news_list));
9295
}
93-
9496
return new BlogItemViewHolder(inflateView(parent, R.layout.item_blog_list));
9597
}
9698

9799
@Override
98100
public void onBindViewHolder(RecyclerView.ViewHolder vh, int position, final BlogBean m) {
99-
100-
if (getItemViewType(position) == VIEW_TYPE_LOADING || getItemViewType(position) == VIEW_TYPE_EMPTY) {
101+
int viewType = getItemViewType(position);
102+
if (viewType == VIEW_TYPE_LOADING
103+
|| viewType == VIEW_TYPE_EMPTY
104+
) {
101105
return;
102106
}
103107

@@ -164,7 +168,7 @@ public void onClick(View v) {
164168
private CharSequence formatHtml(String text) {
165169
if (TextUtils.isEmpty(text)) return text;
166170
// <strong>android</strong>
167-
text = text.replace("<strong>", "<strong><font color='red'>").replace("</strong>", "</font></strong>");
171+
text = text.replace("<strong>", "<strong><font color='#dd4b39'>").replace("</strong>", "</font></strong>");
168172
return Html.fromHtml(text);
169173
}
170174

app/src/main/java/com/rae/cnblogs/adapter/SearchSuggestionAdapter.java

+9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.rae.cnblogs.adapter;
22

33
import android.view.LayoutInflater;
4+
import android.view.View;
45
import android.view.ViewGroup;
56

67
import com.rae.cnblogs.R;
@@ -12,6 +13,12 @@
1213
*/
1314
public class SearchSuggestionAdapter extends BaseItemAdapter<String, SearchSuggestionHolder> {
1415

16+
private View.OnClickListener mSelectedClickListener;
17+
18+
public void setSelectedClickListener(View.OnClickListener selectedClickListener) {
19+
mSelectedClickListener = selectedClickListener;
20+
}
21+
1522
@Override
1623
public SearchSuggestionHolder onCreateViewHolder(LayoutInflater inflater, ViewGroup parent, int viewType) {
1724
return new SearchSuggestionHolder(inflateView(parent, R.layout.item_search_suggestion));
@@ -20,5 +27,7 @@ public SearchSuggestionHolder onCreateViewHolder(LayoutInflater inflater, ViewGr
2027
@Override
2128
public void onBindViewHolder(SearchSuggestionHolder holder, int position, String m) {
2229
holder.getTitleView().setText(m);
30+
holder.getSelectedView().setTag(m);
31+
holder.getSelectedView().setOnClickListener(mSelectedClickListener);
2332
}
2433
}

app/src/main/java/com/rae/cnblogs/fragment/BlogListFragment.java

+6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.rae.cnblogs.service.JobScheduler;
1919
import com.rae.cnblogs.service.job.JobEvent;
2020
import com.rae.cnblogs.widget.AppLayout;
21+
import com.rae.cnblogs.widget.HomeSearchHeader;
2122
import com.rae.cnblogs.widget.PlaceholderView;
2223
import com.rae.cnblogs.widget.RaeRecyclerView;
2324
import com.rae.swift.Rx;
@@ -150,6 +151,11 @@ public void onLoadMore() {
150151
}
151152
});
152153

154+
HomeSearchHeader searchHeader = new HomeSearchHeader(getContext());
155+
mAppLayout.removePtrUIHandler(mAppLayout.getHeader());
156+
mAppLayout.setHeaderView(searchHeader);
157+
mAppLayout.addPtrUIHandler(searchHeader);
158+
153159
if (mBlogType == BlogType.BLOGGER) {
154160
mAppLayout.setEnabled(false); // 博主页面不允许刷新
155161
}

app/src/main/java/com/rae/cnblogs/fragment/BlogTypeListFragment.java

+11
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
import android.view.View;
66
import android.widget.TextView;
77

8+
import com.rae.cnblogs.AppRoute;
89
import com.rae.cnblogs.R;
910
import com.rae.cnblogs.sdk.bean.BlogType;
1011
import com.rae.cnblogs.sdk.bean.CategoryBean;
1112

1213
import butterknife.BindView;
14+
import butterknife.OnClick;
1315

1416
/**
1517
* 博客类型的列表
@@ -36,6 +38,15 @@ protected int getLayoutId() {
3638
}
3739

3840

41+
@OnClick(R.id.img_search)
42+
public void onSearchClick() {
43+
if (mBlogType == BlogType.NEWS)
44+
AppRoute.jumpToSearchNews(getContext());
45+
if (mBlogType == BlogType.KB)
46+
AppRoute.jumpToSearchKb(getContext());
47+
}
48+
49+
3950
@Override
4051
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
4152
super.onViewCreated(view, savedInstanceState);

app/src/main/java/com/rae/cnblogs/fragment/HomeFragment.java

+14-15
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import com.rae.cnblogs.presenter.CnblogsPresenterFactory;
1717
import com.rae.cnblogs.presenter.IHomePresenter;
1818
import com.rae.cnblogs.sdk.bean.CategoryBean;
19-
import com.rae.cnblogs.sdk.bean.UserInfoBean;
2019

2120
import org.greenrobot.eventbus.EventBus;
2221
import org.greenrobot.eventbus.Subscribe;
@@ -37,7 +36,6 @@ public class HomeFragment extends BaseFragment implements IHomePresenter.IHomeVi
3736
private IHomePresenter mHomePresenter;
3837
private List<CategoryBean> mCategoryBeanList;
3938
private int mPosition;
40-
private SearchFragment mSearchFragment;
4139

4240
public static HomeFragment newInstance() {
4341
return new HomeFragment();
@@ -113,7 +111,7 @@ public void onTabUnselected(TabLayout.Tab tab) {
113111

114112
@Override
115113
public void onTabReselected(TabLayout.Tab tab) {
116-
onLogoClick();
114+
goTop();
117115
}
118116
});
119117
} else {
@@ -139,14 +137,15 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
139137

140138
@OnClick(R.id.img_search)
141139
public void onSearchClick() {
142-
if (mSearchFragment == null) {
143-
mSearchFragment = new SearchFragment();
144-
}
145-
mSearchFragment.show(getChildFragmentManager(), "search");
140+
AppRoute.jumpToSearch(this.getContext());
146141
}
147142

148143
@OnClick(R.id.img_actionbar_logo)
149144
public void onLogoClick() {
145+
onSearchClick();
146+
}
147+
148+
private void goTop() {
150149
// 返回顶部
151150
int currentItem = mViewPager.getCurrentItem();
152151
BlogListFragment fragment = mAdapter.getFragment(currentItem);
@@ -155,19 +154,19 @@ public void onLogoClick() {
155154
}
156155

157156

158-
@Override
159-
public void onLoadUserInfo(UserInfoBean userInfo) {
160-
// 加载头像
157+
// @Override
158+
// public void onLoadUserInfo(UserInfoBean userInfo) {
159+
// //加载头像
161160
// mAvatarView.setVisibility(View.VISIBLE);
162161
// mNotLoginAvatarView.setVisibility(View.GONE);
163162
// ImageLoader.getInstance().displayImage(userInfo.getAvatar(), mAvatarView);
164-
}
163+
// }
165164

166-
@Override
167-
public void onLoadNormal() {
165+
// @Override
166+
// public void onLoadNormal() {
168167
// mAvatarView.setVisibility(View.GONE);
169168
// mNotLoginAvatarView.setVisibility(View.VISIBLE);
170-
}
169+
// }
171170

172171
@Override
173172
public void onStop() {
@@ -187,7 +186,7 @@ public void onTabEvent(TabEvent event) {
187186
mViewPager.post(new Runnable() {
188187
@Override
189188
public void run() {
190-
onLogoClick();
189+
goTop();
191190
}
192191
});
193192
}

app/src/main/java/com/rae/cnblogs/fragment/SearchFragment.java

+43-4
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@
44
import android.os.Bundle;
55
import android.support.annotation.Nullable;
66
import android.support.design.widget.TabLayout;
7-
import android.support.v4.app.DialogFragment;
87
import android.support.v4.view.ViewPager;
98
import android.support.v7.widget.LinearLayoutManager;
109
import android.support.v7.widget.RecyclerView;
1110
import android.text.Editable;
1211
import android.text.TextWatcher;
12+
import android.view.KeyEvent;
1313
import android.view.LayoutInflater;
1414
import android.view.View;
1515
import android.view.ViewGroup;
16+
import android.view.inputmethod.EditorInfo;
1617
import android.view.inputmethod.InputMethodManager;
1718
import android.widget.EditText;
1819
import android.widget.ImageView;
@@ -40,7 +41,12 @@
4041
* 搜索
4142
* Created by ChenRui on 2017/8/28 0028 14:51.
4243
*/
43-
public class SearchFragment extends DialogFragment implements ISearchContract.View {
44+
public class SearchFragment extends BaseFragment implements ISearchContract.View {
45+
46+
public static SearchFragment newInstance() {
47+
return new SearchFragment();
48+
}
49+
4450
@BindView(R.id.et_search_text)
4551
EditText mSearchView;
4652
@BindView(R.id.img_edit_delete)
@@ -111,6 +117,29 @@ private void initView() {
111117
mViewPager.setOffscreenPageLimit(5);
112118
mTabLayout.setupWithViewPager(mViewPager);
113119

120+
mSearchView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
121+
@Override
122+
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
123+
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
124+
preformSearch();
125+
return true;
126+
}
127+
return false;
128+
}
129+
});
130+
131+
// 搜索建议上档点击
132+
mSuggestionAdapter.setSelectedClickListener(new View.OnClickListener() {
133+
@Override
134+
public void onClick(View v) {
135+
String text = (String) v.getTag();
136+
if (text != null) {
137+
mSearchView.setText(text);
138+
mSearchView.setSelection(text.length());
139+
}
140+
}
141+
});
142+
114143
mSuggestionAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
115144
@Override
116145
public void onChanged() {
@@ -164,6 +193,17 @@ public void afterTextChanged(Editable editable) {
164193
mSearchView.addTextChangedListener(mSearchTextWatcher);
165194
}
166195

196+
@Override
197+
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
198+
super.onActivityCreated(savedInstanceState);
199+
if (getActivity() != null && getActivity().getIntent() != null) {
200+
int position = getActivity().getIntent().getIntExtra("position", 0);
201+
if (position > 0 && mViewPager != null) {
202+
mViewPager.setCurrentItem(position);
203+
}
204+
}
205+
}
206+
167207
@OnClick(R.id.rl_edit_delete)
168208
public void onEditDeleteClick() {
169209
mSearchView.setText("");
@@ -176,8 +216,7 @@ public void onSearchClick() {
176216
preformSearch();
177217
} else {
178218
// 退出
179-
// getActivity().finish();
180-
dismiss();
219+
getActivity().finish();
181220
}
182221
}
183222

0 commit comments

Comments
 (0)