Skip to content

Commit ad4d5fd

Browse files
author
李宾
committed
搜索
1 parent 69bc219 commit ad4d5fd

File tree

7 files changed

+218
-14
lines changed

7 files changed

+218
-14
lines changed

app/src/main/AndroidManifest.xml

+7-4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
<category android:name="android.intent.category.LAUNCHER" />
3636
</intent-filter>
3737
</activity>
38+
<activity
39+
android:name=".views.SearchActivity"
40+
android:configChanges="keyboardHidden|orientation|screenSize" />
3841
<activity
3942
android:name=".views.TopicDetailActivity"
4043
android:configChanges="keyboardHidden|orientation|screenSize"
@@ -87,12 +90,12 @@
8790
android:label="@string/main_drawer_settings"
8891
android:theme="@style/AppTheme.ActionBar" />
8992

90-
<activity android:name=".views.SendToWXActivity"
93+
<activity
94+
android:name=".views.SendToWXActivity"
9195
android:configChanges="keyboardHidden|orientation|screenSize"
92-
android:label="分享到朋友圈"
9396
android:icon="@drawable/icon_res_download_moments"
94-
android:theme="@style/DirectShareDialogTheme"
95-
>
97+
android:label="分享到朋友圈"
98+
android:theme="@style/DirectShareDialogTheme">
9699
<intent-filter>
97100
<action android:name="android.intent.action.SEND" />
98101
<category android:name="android.intent.category.DEFAULT" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package com.testerhome.nativeandroid.fragments;
2+
3+
import android.os.Bundle;
4+
import android.support.v4.widget.SwipeRefreshLayout;
5+
import android.support.v7.widget.LinearLayoutManager;
6+
import android.support.v7.widget.RecyclerView;
7+
import android.util.Log;
8+
9+
import com.testerhome.nativeandroid.BuildConfig;
10+
import com.testerhome.nativeandroid.R;
11+
import com.testerhome.nativeandroid.models.SearchResponse;
12+
import com.testerhome.nativeandroid.networks.RestAdapterUtils;
13+
import com.testerhome.nativeandroid.views.adapters.TopicsListAdapter;
14+
import com.testerhome.nativeandroid.views.widgets.DividerItemDecoration;
15+
16+
import butterknife.Bind;
17+
import retrofit.Callback;
18+
import retrofit.Response;
19+
import retrofit.Retrofit;
20+
21+
/**
22+
* Created by Bin Li on 2015/9/16.
23+
*/
24+
public class SearchResultFragment extends BaseFragment implements Callback<SearchResponse> {
25+
26+
@Bind(R.id.rv_topic_list)
27+
RecyclerView recyclerViewTopicList;
28+
29+
@Bind(R.id.srl_refresh)
30+
SwipeRefreshLayout swipeRefreshLayout;
31+
32+
private int mNextCursor = 1;
33+
34+
private TopicsListAdapter mAdatper;
35+
36+
private String keyword;
37+
38+
public static SearchResultFragment newInstance(String keyword) {
39+
Bundle args = new Bundle();
40+
args.putString("keyword", keyword);
41+
SearchResultFragment fragment = new SearchResultFragment();
42+
fragment.setArguments(args);
43+
return fragment;
44+
}
45+
46+
@Override
47+
protected int getLayoutRes() {
48+
return R.layout.fragment_topics;
49+
}
50+
51+
@Override
52+
public void onActivityCreated(Bundle savedInstanceState) {
53+
super.onActivityCreated(savedInstanceState);
54+
keyword = getArguments().getString("keyword");
55+
56+
loadTopics(true);
57+
}
58+
59+
60+
@Override
61+
protected void setupView() {
62+
mAdatper = new TopicsListAdapter(getActivity());
63+
mAdatper.setListener(new TopicsListAdapter.EndlessListener() {
64+
@Override
65+
public void onListEnded() {
66+
if (mNextCursor > 1) {
67+
loadTopics(false);
68+
}
69+
}
70+
});
71+
72+
recyclerViewTopicList.setLayoutManager(new LinearLayoutManager(getActivity()));
73+
recyclerViewTopicList.addItemDecoration(new DividerItemDecoration(getActivity(),
74+
DividerItemDecoration.VERTICAL_LIST));
75+
recyclerViewTopicList.setAdapter(mAdatper);
76+
swipeRefreshLayout.setColorSchemeResources(
77+
android.R.color.holo_blue_light,
78+
android.R.color.holo_red_light,
79+
android.R.color.holo_orange_light,
80+
android.R.color.holo_green_light);
81+
82+
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
83+
@Override
84+
public void onRefresh() {
85+
mNextCursor = 1;
86+
loadTopics(false);
87+
}
88+
});
89+
90+
}
91+
92+
private void loadTopics(boolean showloading) {
93+
94+
if (swipeRefreshLayout != null) {
95+
swipeRefreshLayout.setRefreshing(true);
96+
}
97+
98+
if (showloading)
99+
showLoadingView();
100+
101+
102+
if (keyword != null) {
103+
RestAdapterUtils.getRestAPI(getActivity()).searchTopicsByKeyword(keyword,
104+
mNextCursor * 20).enqueue(this);
105+
}
106+
107+
}
108+
109+
@Override
110+
public void onResponse(Response<SearchResponse> response, Retrofit retrofit) {
111+
112+
if (BuildConfig.DEBUG)
113+
Log.e("cache", "cache header = [" + response.headers().toString() + "]");
114+
115+
hideLoadingView();
116+
if (swipeRefreshLayout != null && swipeRefreshLayout.isRefreshing()) {
117+
swipeRefreshLayout.setRefreshing(false);
118+
}
119+
120+
Log.e("retrofit", response.raw().request().urlString());
121+
if (response.body() != null && response.body().getTopics().size() > 0) {
122+
if (mNextCursor == 1) {
123+
mAdatper.setItems(response.body().getTopics());
124+
} else {
125+
mAdatper.addItems(response.body().getTopics());
126+
}
127+
if (response.body().getTopics().size() >= 10) {
128+
mNextCursor += 1;
129+
} else {
130+
mNextCursor = 1;
131+
}
132+
133+
} else {
134+
mNextCursor = 1;
135+
}
136+
}
137+
138+
@Override
139+
public void onFailure(Throwable t) {
140+
hideLoadingView();
141+
if (swipeRefreshLayout != null && swipeRefreshLayout.isRefreshing()) {
142+
swipeRefreshLayout.setRefreshing(false);
143+
}
144+
if (BuildConfig.DEBUG)
145+
Log.e("cache", "failure() called with: " + "error = [" + t.getMessage() + "]", t);
146+
}
147+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.testerhome.nativeandroid.models;
2+
3+
import java.util.List;
4+
5+
/**
6+
* Created by Bin Li on 2015/9/15.
7+
*/
8+
public class SearchResponse {
9+
10+
private List<TopicEntity> search;
11+
12+
public List<TopicEntity> getTopics() {
13+
return search;
14+
}
15+
16+
public void setTopics(List<TopicEntity> search) {
17+
this.search = search;
18+
}
19+
}

app/src/main/java/com/testerhome/nativeandroid/networks/TopicsService.java

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.testerhome.nativeandroid.models.CreateReplyResponse;
55
import com.testerhome.nativeandroid.models.NotificationResponse;
66
import com.testerhome.nativeandroid.models.PraiseEntity;
7+
import com.testerhome.nativeandroid.models.SearchResponse;
78
import com.testerhome.nativeandroid.models.TopicDetailResponse;
89
import com.testerhome.nativeandroid.models.TopicReplyResponse;
910
import com.testerhome.nativeandroid.models.TopicsResponse;
@@ -31,6 +32,10 @@ public interface TopicsService {
3132
Call<TopicsResponse> getTopicsByType(@Query("type") String type,
3233
@Query("offset") int offset);
3334

35+
@GET("search.json")
36+
Call<SearchResponse> searchTopicsByKeyword(@Query("q") String keyword,
37+
@Query("page") int page);
38+
3439

3540
@GET("topics.json")
3641
Call<TopicsResponse> getTopicsByNodeId(@Query("node_id") int nodeId,

app/src/main/java/com/testerhome/nativeandroid/views/MainActivity.java

+4
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,10 @@ public void onBackPressed() {
236236
@Override
237237
public boolean onQueryTextSubmit(String query) {
238238
Log.e("search", "search:" + query);
239+
240+
if (!TextUtils.isEmpty(query)){
241+
startActivity(new Intent(this, SearchActivity.class).putExtra("keyword", query));
242+
}
239243
return false;
240244
}
241245

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.testerhome.nativeandroid.views;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.Nullable;
5+
6+
import com.testerhome.nativeandroid.R;
7+
import com.testerhome.nativeandroid.fragments.SearchResultFragment;
8+
import com.testerhome.nativeandroid.views.base.BackBaseActivity;
9+
10+
/**
11+
* Created by vclub on 15/11/12.
12+
*/
13+
public class SearchActivity extends BackBaseActivity {
14+
15+
@Override
16+
protected void onCreate(@Nullable Bundle savedInstanceState) {
17+
super.onCreate(savedInstanceState);
18+
setContentView(R.layout.activity_back_base);
19+
setCustomTitle("搜索");
20+
21+
if (getIntent().hasExtra("keyword")) {
22+
String keyword = getIntent().getStringExtra("keyword");
23+
setCustomTitle("搜索-" + keyword);
24+
setupView(keyword);
25+
} else
26+
finish();
27+
28+
}
29+
30+
private void setupView(String keyword) {
31+
getSupportFragmentManager().beginTransaction().replace(R.id.container,
32+
SearchResultFragment.newInstance(keyword))
33+
.commit();
34+
}
35+
}

swipebackhelper/swipebackhelper.iml

+1-10
Original file line numberDiff line numberDiff line change
@@ -65,22 +65,13 @@
6565
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
6666
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
6767
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
68+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
6869
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
6970
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
7071
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
71-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
7272
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
73-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
74-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
7573
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
76-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
77-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
78-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
7974
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
80-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
81-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
82-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
83-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
8475
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
8576
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
8677
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />

0 commit comments

Comments
 (0)