Skip to content

Commit 5a589f2

Browse files
committed
update: add toggleCollapsed method && update the demo to show usage with RecyclerView
1 parent 910fcd9 commit 5a589f2

2 files changed

Lines changed: 70 additions & 8 deletions

File tree

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: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public class ReadMoreTextView extends TextView {
5959
private int lineEndIndex;
6060
private int trimLines;
6161

62+
private Watcher watcher;
63+
6264
public ReadMoreTextView(Context context) {
6365
this(context, null);
6466
}
@@ -168,6 +170,9 @@ private CharSequence getTrimmedText(CharSequence text) {
168170
}
169171

170172
private CharSequence updateCollapsedText() {
173+
if (watcher != null) {
174+
watcher.onCollapsed();
175+
}
171176
int trimEndIndex = text.length();
172177
switch (trimMode) {
173178
case TRIM_MODE_LINES:
@@ -195,6 +200,9 @@ private CharSequence updateCollapsedText() {
195200
}
196201

197202
private CharSequence updateExpandedText() {
203+
if (watcher != null) {
204+
watcher.onExpanded();
205+
}
198206
if (showTrimExpandedText) {
199207
SpannableStringBuilder s = new SpannableStringBuilder(text, 0, text.length()).append(trimExpandedText);
200208
return addClickableSpan(s, trimExpandedText);
@@ -207,6 +215,15 @@ private CharSequence addClickableSpan(SpannableStringBuilder s, CharSequence tri
207215
return s;
208216
}
209217

218+
public void toggleCollapsed(boolean readMore) {
219+
this.readMore = readMore;
220+
setText();
221+
}
222+
223+
public void setToggleWatcher(Watcher watcher) {
224+
this.watcher = watcher;
225+
}
226+
210227
public void setTrimLength(int trimLength) {
211228
this.trimLength = trimLength;
212229
setText();
@@ -279,4 +296,10 @@ private void refreshLineEndIndex() {
279296
e.printStackTrace();
280297
}
281298
}
299+
300+
public interface Watcher {
301+
public void onExpanded();
302+
303+
public void onCollapsed();
304+
}
282305
}

0 commit comments

Comments
 (0)