Skip to content

Commit f35f17c

Browse files
committed
[Refactor] Use view binding instead of ButterKnife.
1 parent cfb3e0e commit f35f17c

19 files changed

Lines changed: 113 additions & 163 deletions

sample/build.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ android {
1010
versionCode Integer.parseInt(VERSION_CODE)
1111
versionName VERSION_NAME
1212
}
13+
buildFeatures {
14+
viewBinding true
15+
}
1316
compileOptions {
1417
sourceCompatibility JavaVersion.VERSION_1_8
1518
targetCompatibility JavaVersion.VERSION_1_8
@@ -36,7 +39,5 @@ dependencies {
3639
implementation 'androidx.appcompat:appcompat:1.3.0'
3740
implementation 'androidx.recyclerview:recyclerview:1.2.1'
3841
implementation 'com.google.android.material:material:1.3.0'
39-
implementation 'com.jakewharton:butterknife:10.2.3'
40-
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
4142
implementation project(':library')
4243
}

sample/src/main/java/me/zhanghai/android/fastscroll/sample/AppBarLayoutLiftOnScrollHack.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616

1717
package me.zhanghai.android.fastscroll.sample;
1818

19-
import com.google.android.material.appbar.AppBarLayout;
20-
2119
import androidx.annotation.NonNull;
2220
import androidx.coordinatorlayout.widget.CoordinatorLayout;
2321

22+
import com.google.android.material.appbar.AppBarLayout;
23+
2424
public class AppBarLayoutLiftOnScrollHack {
2525

2626
private AppBarLayoutLiftOnScrollHack() {}

sample/src/main/java/me/zhanghai/android/fastscroll/sample/CoordinatorScrollingFrameLayout.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@
2323
import android.view.WindowInsets;
2424
import android.widget.FrameLayout;
2525

26-
import com.google.android.material.appbar.AppBarLayout;
27-
2826
import androidx.annotation.AttrRes;
2927
import androidx.annotation.NonNull;
3028
import androidx.annotation.Nullable;
3129
import androidx.annotation.StyleRes;
3230
import androidx.coordinatorlayout.widget.CoordinatorLayout;
3331
import androidx.core.view.WindowInsetsCompat;
3432

33+
import com.google.android.material.appbar.AppBarLayout;
34+
3535
public class CoordinatorScrollingFrameLayout extends FrameLayout
3636
implements CoordinatorLayout.AttachedBehavior {
3737

sample/src/main/java/me/zhanghai/android/fastscroll/sample/License.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818

1919
import android.content.Context;
2020

21-
import java.io.IOException;
22-
import java.io.InputStream;
23-
2421
import androidx.annotation.NonNull;
2522
import androidx.annotation.Nullable;
2623

24+
import java.io.IOException;
25+
import java.io.InputStream;
26+
2727
public class License {
2828

2929
@Nullable

sample/src/main/java/me/zhanghai/android/fastscroll/sample/LocaleListAdapter.java

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,15 @@
1818

1919
import android.text.TextUtils;
2020
import android.view.LayoutInflater;
21-
import android.view.View;
2221
import android.view.ViewGroup;
23-
import android.widget.TextView;
24-
25-
import java.util.Locale;
2622

2723
import androidx.annotation.NonNull;
2824
import androidx.recyclerview.widget.RecyclerView;
29-
import butterknife.BindView;
30-
import butterknife.ButterKnife;
25+
26+
import java.util.Locale;
27+
3128
import me.zhanghai.android.fastscroll.PopupTextProvider;
29+
import me.zhanghai.android.fastscroll.sample.databinding.ListItemBinding;
3230

3331
public class LocaleListAdapter extends RecyclerView.Adapter<LocaleListAdapter.ViewHolder>
3432
implements PopupTextProvider {
@@ -60,22 +58,24 @@ public long getItemId(int position) {
6058
@NonNull
6159
@Override
6260
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
63-
ViewHolder holder = new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(
64-
R.layout.list_item, parent, false));
65-
holder.itemView.setClickable(true);
66-
holder.itemView.setFocusable(true);
67-
holder.titleText.setEllipsize(TextUtils.TruncateAt.END);
68-
holder.titleText.setSingleLine();
69-
holder.subtitleText.setEllipsize(TextUtils.TruncateAt.END);
70-
holder.subtitleText.setSingleLine();
61+
ViewHolder holder = new ViewHolder(ListItemBinding.inflate(
62+
LayoutInflater.from(parent.getContext()), parent, false));
63+
ListItemBinding binding = holder.binding;
64+
binding.getRoot().setClickable(true);
65+
binding.getRoot().setFocusable(true);
66+
binding.titleText.setEllipsize(TextUtils.TruncateAt.END);
67+
binding.titleText.setSingleLine();
68+
binding.subtitleText.setEllipsize(TextUtils.TruncateAt.END);
69+
binding.subtitleText.setSingleLine();
7170
return holder;
7271
}
7372

7473
@Override
7574
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
7675
Locale locale = getItem(position);
77-
holder.titleText.setText(locale.toString());
78-
holder.subtitleText.setText(locale.getDisplayName());
76+
ListItemBinding binding = holder.binding;
77+
binding.titleText.setText(locale.toString());
78+
binding.subtitleText.setText(locale.getDisplayName());
7979
}
8080

8181
@NonNull
@@ -87,15 +87,12 @@ public String getPopupText(int position) {
8787

8888
static class ViewHolder extends RecyclerView.ViewHolder {
8989

90-
@BindView(R.id.title)
91-
TextView titleText;
92-
@BindView(R.id.subtitle)
93-
TextView subtitleText;
90+
public final ListItemBinding binding;
9491

95-
public ViewHolder(@NonNull View itemView) {
96-
super(itemView);
92+
public ViewHolder(@NonNull ListItemBinding binding) {
93+
super(binding.getRoot());
9794

98-
ButterKnife.bind(this, itemView);
95+
this.binding = binding;
9996
}
10097
}
10198
}

sample/src/main/java/me/zhanghai/android/fastscroll/sample/MainFragment.java

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,33 +29,21 @@
2929
import android.view.ViewGroup;
3030
import android.widget.Toast;
3131

32-
import com.google.android.material.appbar.AppBarLayout;
33-
import com.google.android.material.navigation.NavigationView;
34-
3532
import androidx.annotation.IdRes;
3633
import androidx.annotation.NonNull;
3734
import androidx.annotation.Nullable;
3835
import androidx.appcompat.app.AppCompatActivity;
39-
import androidx.appcompat.widget.Toolbar;
4036
import androidx.core.view.GravityCompat;
41-
import androidx.drawerlayout.widget.DrawerLayout;
4237
import androidx.fragment.app.Fragment;
43-
import butterknife.BindView;
44-
import butterknife.ButterKnife;
38+
39+
import me.zhanghai.android.fastscroll.sample.databinding.MainFragmentBinding;
4540

4641
public class MainFragment extends Fragment {
4742

4843
private static final Uri GITHUB_URI = Uri.parse(
4944
"https://github.com/zhanghai/AndroidFastScroll");
5045

51-
@BindView(R.id.drawer)
52-
DrawerLayout mDrawerLayout;
53-
@BindView(R.id.navigation)
54-
NavigationView mNavigationView;
55-
@BindView(R.id.toolbar)
56-
Toolbar mToolbar;
57-
@BindView(R.id.app_bar)
58-
AppBarLayout mAppBarLayout;
46+
private MainFragmentBinding mBinding;
5947

6048
@NonNull
6149
public static MainFragment newInstance() {
@@ -73,14 +61,8 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
7361
@Override
7462
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
7563
@Nullable Bundle savedInstanceState) {
76-
return inflater.inflate(R.layout.main_fragment, container, false);
77-
}
78-
79-
@Override
80-
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
81-
super.onViewCreated(view, savedInstanceState);
82-
83-
ButterKnife.bind(this, view);
64+
mBinding = MainFragmentBinding.inflate(inflater, container, false);
65+
return mBinding.getRoot();
8466
}
8567

8668
@Override
@@ -95,14 +77,14 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
9577
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
9678
}
9779

98-
activity.setSupportActionBar(mToolbar);
80+
activity.setSupportActionBar(mBinding.toolbar);
9981

10082
if (savedInstanceState == null) {
10183
setNavigationCheckedItem(R.id.recycler_view_list);
10284
}
103-
mNavigationView.setNavigationItemSelectedListener(this::onNavigationItemSelected);
85+
mBinding.navigation.setNavigationItemSelectedListener(this::onNavigationItemSelected);
10486

105-
AppBarLayoutLiftOnScrollHack.hack(mAppBarLayout, R.id.scrolling_view);
87+
AppBarLayoutLiftOnScrollHack.hack(mBinding.appBarLayout, R.id.scrollingView);
10688
}
10789

10890
@Override
@@ -114,7 +96,7 @@ public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflat
11496
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
11597
switch (item.getItemId()) {
11698
case android.R.id.home:
117-
mDrawerLayout.openDrawer(GravityCompat.START);
99+
mBinding.drawerLayout.openDrawer(GravityCompat.START);
118100
return true;
119101
case R.id.action_view_on_github:
120102
viewOnGitHub();
@@ -125,8 +107,8 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) {
125107
}
126108

127109
public boolean onBackPressed() {
128-
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
129-
mDrawerLayout.closeDrawer(GravityCompat.START);
110+
if (mBinding.drawerLayout.isDrawerOpen(GravityCompat.START)) {
111+
mBinding.drawerLayout.closeDrawer(GravityCompat.START);
130112
return true;
131113
}
132114
return false;
@@ -152,15 +134,15 @@ private boolean onNavigationItemSelected(@NonNull MenuItem item) {
152134
case R.id.nested_scroll_view:
153135
case R.id.web_view:
154136
setNavigationCheckedItem(itemId);
155-
mDrawerLayout.closeDrawer(GravityCompat.START);
137+
mBinding.drawerLayout.closeDrawer(GravityCompat.START);
156138
return true;
157139
default:
158140
return false;
159141
}
160142
}
161143

162144
private void setNavigationCheckedItem(@IdRes int itemId) {
163-
MenuItem item = mNavigationView.getCheckedItem();
145+
MenuItem item = mBinding.navigation.getCheckedItem();
164146
if (item != null && item.getItemId() == itemId) {
165147
return;
166148
}
@@ -191,8 +173,8 @@ private void setNavigationCheckedItem(@IdRes int itemId) {
191173
throw new AssertionError(itemId);
192174
}
193175
getChildFragmentManager().beginTransaction()
194-
.replace(R.id.content, fragment)
176+
.replace(R.id.contentLayout, fragment)
195177
.commit();
196-
mNavigationView.setCheckedItem(itemId);
178+
mBinding.navigation.setCheckedItem(itemId);
197179
}
198180
}

sample/src/main/java/me/zhanghai/android/fastscroll/sample/NestedScrollViewFragment.java

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,17 @@
2020
import android.view.LayoutInflater;
2121
import android.view.View;
2222
import android.view.ViewGroup;
23-
import android.widget.TextView;
2423

2524
import androidx.annotation.NonNull;
2625
import androidx.annotation.Nullable;
2726
import androidx.fragment.app.Fragment;
28-
import butterknife.BindView;
29-
import butterknife.ButterKnife;
30-
import me.zhanghai.android.fastscroll.FastScrollNestedScrollView;
27+
3128
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
29+
import me.zhanghai.android.fastscroll.sample.databinding.NestedScrollViewFragmentBinding;
3230

3331
public class NestedScrollViewFragment extends Fragment {
3432

35-
@BindView(R.id.scrolling_view)
36-
FastScrollNestedScrollView mScrollView;
37-
@BindView(R.id.text)
38-
TextView mTextView;
33+
private NestedScrollViewFragmentBinding mBinding;
3934

4035
@NonNull
4136
public static NestedScrollViewFragment newInstance() {
@@ -46,22 +41,17 @@ public static NestedScrollViewFragment newInstance() {
4641
@Override
4742
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
4843
@Nullable Bundle savedInstanceState) {
49-
return inflater.inflate(R.layout.nested_scroll_view_fragment, container, false);
50-
}
51-
52-
@Override
53-
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
54-
super.onViewCreated(view, savedInstanceState);
55-
56-
ButterKnife.bind(this, view);
44+
mBinding = NestedScrollViewFragmentBinding.inflate(inflater, container, false);
45+
return mBinding.getRoot();
5746
}
5847

5948
@Override
6049
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
6150
super.onActivityCreated(savedInstanceState);
6251

63-
mScrollView.setOnApplyWindowInsetsListener(new ScrollingViewOnApplyWindowInsetsListener());
64-
new FastScrollerBuilder(mScrollView).useMd2Style().build();
65-
mTextView.setText(License.get(mTextView.getContext()));
52+
mBinding.scrollingView.setOnApplyWindowInsetsListener(
53+
new ScrollingViewOnApplyWindowInsetsListener());
54+
new FastScrollerBuilder(mBinding.scrollingView).useMd2Style().build();
55+
mBinding.text.setText(License.get(mBinding.text.getContext()));
6656
}
6757
}

sample/src/main/java/me/zhanghai/android/fastscroll/sample/RecyclerViewFragment.java

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,39 +26,32 @@
2626
import androidx.fragment.app.Fragment;
2727
import androidx.recyclerview.widget.LinearLayoutManager;
2828
import androidx.recyclerview.widget.RecyclerView;
29-
import butterknife.BindView;
30-
import butterknife.ButterKnife;
29+
3130
import me.zhanghai.android.fastscroll.FastScroller;
3231
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
32+
import me.zhanghai.android.fastscroll.sample.databinding.RecyclerViewFragmentBinding;
3333

3434
public abstract class RecyclerViewFragment extends Fragment {
3535

36-
@BindView(R.id.scrolling_view)
37-
RecyclerView mRecyclerView;
36+
private RecyclerViewFragmentBinding mBinding;
3837

3938
@Nullable
4039
@Override
4140
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
4241
@Nullable Bundle savedInstanceState) {
43-
return inflater.inflate(R.layout.recycler_view_fragment, container, false);
44-
}
45-
46-
@Override
47-
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
48-
super.onViewCreated(view, savedInstanceState);
49-
50-
ButterKnife.bind(this, view);
42+
mBinding = RecyclerViewFragmentBinding.inflate(inflater, container, false);
43+
return mBinding.getRoot();
5144
}
5245

5346
@Override
5447
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
5548
super.onActivityCreated(savedInstanceState);
5649

57-
mRecyclerView.setLayoutManager(createLayoutManager(mRecyclerView));
58-
mRecyclerView.setAdapter(new LocaleListAdapter());
59-
FastScroller fastScroller = createFastScroller(mRecyclerView);
60-
mRecyclerView.setOnApplyWindowInsetsListener(
61-
new ScrollingViewOnApplyWindowInsetsListener(mRecyclerView, fastScroller));
50+
mBinding.scrollingView.setLayoutManager(createLayoutManager(mBinding.scrollingView));
51+
mBinding.scrollingView.setAdapter(new LocaleListAdapter());
52+
FastScroller fastScroller = createFastScroller(mBinding.scrollingView);
53+
mBinding.scrollingView.setOnApplyWindowInsetsListener(
54+
new ScrollingViewOnApplyWindowInsetsListener(mBinding.scrollingView, fastScroller));
6255
}
6356

6457
@NonNull

sample/src/main/java/me/zhanghai/android/fastscroll/sample/RecyclerViewListClassicFragment.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import androidx.annotation.NonNull;
2020
import androidx.recyclerview.widget.RecyclerView;
21+
2122
import me.zhanghai.android.fastscroll.FastScroller;
2223
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
2324

sample/src/main/java/me/zhanghai/android/fastscroll/sample/RecyclerViewListStatefulFragment.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import androidx.annotation.NonNull;
2020
import androidx.appcompat.content.res.AppCompatResources;
2121
import androidx.recyclerview.widget.RecyclerView;
22+
2223
import me.zhanghai.android.fastscroll.FastScroller;
2324
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
2425

0 commit comments

Comments
 (0)