Skip to content

Commit 6816928

Browse files
committed
update: add toggleCollapsed method && update the demo to show usage with RecyclerView
1 parent 2c681b6 commit 6816928

File tree

2 files changed

+71
-9
lines changed

2 files changed

+71
-9
lines changed

app/src/main/java/com/borjabravo/readmoretextviewsample/MainActivity.java

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,16 @@
1111
import android.widget.TextView;
1212
import android.widget.Toast;
1313

14+
import com.borjabravo.readmoretextview.ReadMoreTextView;
15+
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
1419
public class MainActivity extends AppCompatActivity {
1520

21+
private static final int COUNT = 30;
22+
private List<Item> mItems = new ArrayList<>();
23+
1624
@Override
1725
protected void onCreate(Bundle savedInstanceState) {
1826
super.onCreate(savedInstanceState);
@@ -27,11 +35,27 @@ protected void onCreate(Bundle savedInstanceState) {
2735
text4.setText(getString(R.string.one_line_text));
2836
RecyclerView listView = (RecyclerView) findViewById(R.id.list);
2937
listView.setLayoutManager(new LinearLayoutManager(this));
30-
listView.setAdapter(new ItemAdapter());
38+
initMockData();
39+
listView.setAdapter(new ItemAdapter(mItems));
40+
}
41+
42+
private void initMockData() {
43+
for (int i = 0; i < COUNT; i++) {
44+
Item item = new Item();
45+
item.text = i + " : " + getString(R.string.lorem_ipsum);
46+
item.readMore = true;
47+
mItems.add(item);
48+
}
3149
}
3250

3351
static class ItemAdapter extends RecyclerView.Adapter<ViewHolder> {
3452

53+
private List<Item> mItems;
54+
55+
public ItemAdapter(List<Item> items) {
56+
mItems = new ArrayList<>(items);
57+
}
58+
3559
@Override
3660
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
3761
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
@@ -41,31 +65,46 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
4165
@Override
4266
public void onBindViewHolder(ViewHolder holder, final int position) {
4367
final Context context = holder.itemView.getContext();
44-
holder.text.setText(context.getString(R.string.lorem_ipsum));
68+
holder.text.setText(mItems.get(position).text);
4569
holder.itemView.setOnClickListener(new View.OnClickListener() {
4670
@Override
4771
public void onClick(View v) {
4872
Toast.makeText(context, "you clicked " + position, Toast.LENGTH_SHORT).show();
4973
}
5074
});
5175

52-
//todo ReadMoreTextView should have a pulbic method to reset textView's collapse status
53-
// e.g.
54-
//((ReadMoreTextView) holder.itemView).setCollapsed(position % 2 == 0)
76+
holder.text.setToggleWatcher(new ReadMoreTextView.Watcher() {
77+
@Override
78+
public void onExpanded() {
79+
mItems.get(position).readMore = false;
80+
}
81+
82+
@Override
83+
public void onCollapsed() {
84+
mItems.get(position).readMore = true;
85+
}
86+
});
87+
88+
holder.text.toggleCollapsed(mItems.get(position).readMore);
5589
}
5690

5791
@Override
5892
public int getItemCount() {
59-
return 10;
93+
return mItems.size();
6094
}
6195
}
6296

6397
static class ViewHolder extends RecyclerView.ViewHolder {
64-
TextView text;
98+
ReadMoreTextView text;
6599

66100
public ViewHolder(View itemView) {
67101
super(itemView);
68-
text = (TextView) itemView.findViewById(R.id.text);
102+
text = (ReadMoreTextView) itemView.findViewById(R.id.text);
69103
}
70104
}
105+
106+
static class Item {
107+
public String text;
108+
public boolean readMore;
109+
}
71110
}

readmoretextview/src/main/java/com/borjabravo/readmoretextview/ReadMoreTextView.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public class ReadMoreTextView extends TextView {
5656
private int lineEndIndex;
5757
private int trimLines;
5858

59+
private Watcher watcher;
60+
5961
public ReadMoreTextView(Context context) {
6062
this(context, null);
6163
}
@@ -167,6 +169,9 @@ private CharSequence getTrimmedText(CharSequence text) {
167169
}
168170

169171
private CharSequence updateCollapsedText() {
172+
if (watcher != null) {
173+
watcher.onCollapsed();
174+
}
170175
int trimEndIndex = text.length();
171176
switch (trimMode) {
172177
case TRIM_MODE_LINES:
@@ -194,6 +199,9 @@ private CharSequence updateCollapsedText() {
194199
}
195200

196201
private CharSequence updateExpandedText() {
202+
if (watcher != null) {
203+
watcher.onExpanded();
204+
}
197205
if (showTrimExpandedText) {
198206
SpannableStringBuilder s = new SpannableStringBuilder(text, 0, text.length()).append(trimExpandedText);
199207
return addClickableSpan(s, trimExpandedText);
@@ -206,6 +214,15 @@ private CharSequence addClickableSpan(SpannableStringBuilder s, CharSequence tri
206214
return s;
207215
}
208216

217+
public void toggleCollapsed(boolean readMore) {
218+
this.readMore = readMore;
219+
setText();
220+
}
221+
222+
public void setToggleWatcher(Watcher watcher) {
223+
this.watcher = watcher;
224+
}
225+
209226
public void setTrimLength(int trimLength) {
210227
this.trimLength = trimLength;
211228
setText();
@@ -278,4 +295,10 @@ private void refreshLineEndIndex() {
278295
e.printStackTrace();
279296
}
280297
}
281-
}
298+
299+
public interface Watcher {
300+
public void onExpanded();
301+
302+
public void onCollapsed();
303+
}
304+
}

0 commit comments

Comments
 (0)