Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update: add toggleCollapsed method && update the demo to show usage w…
…ith RecyclerView
  • Loading branch information
deskid committed Nov 29, 2017
commit 68169280a7a6826235ade18ae29aa5b31cbb54ca
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,16 @@
import android.widget.TextView;
import android.widget.Toast;

import com.borjabravo.readmoretextview.ReadMoreTextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private static final int COUNT = 30;
private List<Item> mItems = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand All @@ -27,11 +35,27 @@ protected void onCreate(Bundle savedInstanceState) {
text4.setText(getString(R.string.one_line_text));
RecyclerView listView = (RecyclerView) findViewById(R.id.list);
listView.setLayoutManager(new LinearLayoutManager(this));
listView.setAdapter(new ItemAdapter());
initMockData();
listView.setAdapter(new ItemAdapter(mItems));
}

private void initMockData() {
for (int i = 0; i < COUNT; i++) {
Item item = new Item();
item.text = i + " : " + getString(R.string.lorem_ipsum);
item.readMore = true;
mItems.add(item);
}
}

static class ItemAdapter extends RecyclerView.Adapter<ViewHolder> {

private List<Item> mItems;

public ItemAdapter(List<Item> items) {
mItems = new ArrayList<>(items);
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
Expand All @@ -41,31 +65,46 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
final Context context = holder.itemView.getContext();
holder.text.setText(context.getString(R.string.lorem_ipsum));
holder.text.setText(mItems.get(position).text);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "you clicked " + position, Toast.LENGTH_SHORT).show();
}
});

//todo ReadMoreTextView should have a pulbic method to reset textView's collapse status
// e.g.
//((ReadMoreTextView) holder.itemView).setCollapsed(position % 2 == 0)
holder.text.setToggleWatcher(new ReadMoreTextView.Watcher() {
@Override
public void onExpanded() {
mItems.get(position).readMore = false;
}

@Override
public void onCollapsed() {
mItems.get(position).readMore = true;
}
});

holder.text.toggleCollapsed(mItems.get(position).readMore);
}

@Override
public int getItemCount() {
return 10;
return mItems.size();
}
}

static class ViewHolder extends RecyclerView.ViewHolder {
TextView text;
ReadMoreTextView text;

public ViewHolder(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.text);
text = (ReadMoreTextView) itemView.findViewById(R.id.text);
}
}

static class Item {
public String text;
public boolean readMore;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ public class ReadMoreTextView extends TextView {
private int lineEndIndex;
private int trimLines;

private Watcher watcher;

public ReadMoreTextView(Context context) {
this(context, null);
}
Expand Down Expand Up @@ -167,6 +169,9 @@ private CharSequence getTrimmedText(CharSequence text) {
}

private CharSequence updateCollapsedText() {
if (watcher != null) {
watcher.onCollapsed();
}
int trimEndIndex = text.length();
switch (trimMode) {
case TRIM_MODE_LINES:
Expand Down Expand Up @@ -194,6 +199,9 @@ private CharSequence updateCollapsedText() {
}

private CharSequence updateExpandedText() {
if (watcher != null) {
watcher.onExpanded();
}
if (showTrimExpandedText) {
SpannableStringBuilder s = new SpannableStringBuilder(text, 0, text.length()).append(trimExpandedText);
return addClickableSpan(s, trimExpandedText);
Expand All @@ -206,6 +214,15 @@ private CharSequence addClickableSpan(SpannableStringBuilder s, CharSequence tri
return s;
}

public void toggleCollapsed(boolean readMore) {
this.readMore = readMore;
setText();
}

public void setToggleWatcher(Watcher watcher) {
this.watcher = watcher;
}

public void setTrimLength(int trimLength) {
this.trimLength = trimLength;
setText();
Expand Down Expand Up @@ -278,4 +295,10 @@ private void refreshLineEndIndex() {
e.printStackTrace();
}
}
}

public interface Watcher {
public void onExpanded();

public void onCollapsed();
}
}