Skip to content

Commit

Permalink
增加了mvvm支持(2017-08-28)
Browse files Browse the repository at this point in the history
  • Loading branch information
CarGuoSmall committed Aug 28, 2017
1 parent 04e6c0a commit a7960b9
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 146 deletions.
34 changes: 1 addition & 33 deletions app/src/main/java/com/example/richtext/MVVMActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import android.databinding.DataBindingUtil;
import android.graphics.Color;
import android.os.Bundle;
import android.text.method.MovementMethod;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
Expand All @@ -18,29 +17,18 @@
import com.shuyu.textutillib.model.TopicModel;
import com.shuyu.textutillib.model.UserModel;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MVVMActivity extends Activity implements IMVVMView {


@BindView(R.id.mvvm_rich_text_title)
TextView mvvmRichTextTitle;
@BindView(R.id.mvvm_rich_text)
TextView mvvmRichText;

MVViewModel mvViewModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMvvmBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_mvvm);

mvViewModel = new MVViewModel(this, this);
mvViewModel = new MVViewModel(this);
binding.setViewmodel(mvViewModel);

ButterKnife.bind(this);

}

@Override
Expand All @@ -58,26 +46,6 @@ public SpanUrlCallBack getSpanUrlCallBack() {
return spanUrlCallBack;
}

@Override
public void setMovementMethod(MovementMethod movementMethod) {
mvvmRichText.setMovementMethod(movementMethod);
}

@Override
public CharSequence getText() {
return mvvmRichText.getText();
}

@Override
public void setText(CharSequence charSequence) {
mvvmRichText.setText(charSequence);
}

@Override
public void setAutoLinkMask(int flag) {
mvvmRichText.setAutoLinkMask(flag);
}

/**
* 链接回调
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,4 @@ public interface IMVVMView {
SpanAtUserCallBack getSpanAtUserCallBack();

SpanUrlCallBack getSpanUrlCallBack();

void setMovementMethod(MovementMethod movementMethod);

CharSequence getText();

void setText(CharSequence charSequence);

void setAutoLinkMask(int flag);
}
92 changes: 12 additions & 80 deletions app/src/main/java/com/example/richtext/model/MVViewModel.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
package com.example.richtext.model;

import android.content.Context;

import android.databinding.BaseObservable;
import android.databinding.ObservableArrayList;
import android.databinding.ObservableField;
import android.graphics.Color;
import android.text.Spannable;
import android.text.method.MovementMethod;

import com.example.richtext.contract.IMVVMView;
import com.shuyu.textutillib.RichTextBuilder;
import com.shuyu.textutillib.listener.ITextViewShow;
import com.shuyu.textutillib.listener.SpanAtUserCallBack;
import com.shuyu.textutillib.listener.SpanTopicCallBack;
import com.shuyu.textutillib.listener.SpanUrlCallBack;
import com.shuyu.textutillib.model.TopicModel;
import com.shuyu.textutillib.model.UserModel;

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

/**
* view model
Expand All @@ -24,14 +21,10 @@

public class MVViewModel extends BaseObservable {

public final ObservableField<CharSequence> currentTextString = new ObservableField<>();

public final ObservableField<String> currentTextViewString = new ObservableField<>();

public final ObservableField<String> currentTextTitle = new ObservableField<>("未输入文本");

public final ObservableField<Integer> linkFlag = new ObservableField<>(0);

public final ObservableArrayList<TopicModel> topicListOb = new ObservableArrayList<>();

public final ObservableArrayList<UserModel> nameListOb = new ObservableArrayList<>();
Expand All @@ -44,115 +37,54 @@ public class MVViewModel extends BaseObservable {

public final ObservableField<Boolean> needNumberShow = new ObservableField<>(true);

private List<TopicModel> topicModels = new ArrayList<>();
public final ObservableField<SpanAtUserCallBack> spanAtUserCallback = new ObservableField<>();

private List<UserModel> nameList = new ArrayList<>();
public final ObservableField<SpanTopicCallBack> spanTopicCallback = new ObservableField<>();

private Context context;
public final ObservableField<SpanUrlCallBack> spanUrlCallback = new ObservableField<>();

private IMVVMView imvvmView;

private int textFlag = 0;

public MVViewModel(Context context, IMVVMView imvvmView) {
this.context = context;
public MVViewModel(IMVVMView imvvmView) {
this.imvvmView = imvvmView;
initData();
}

private void initData() {
nameList.clear();
topicModels.clear();
nameListOb.clear();
topicListOb.clear();

UserModel userModel = new UserModel();
userModel.setUser_name("22222");
userModel.setUser_id("2222");
nameList.add(userModel);
userModel = new UserModel();
userModel.setUser_name("kkk");
userModel.setUser_id("23333");
nameList.add(userModel);

TopicModel topicModel = new TopicModel();
topicModel.setTopicId("333");
topicModel.setTopicName("话题话题");
topicModels.add(topicModel);


userModel = new UserModel();
userModel.setUser_name("22222");
userModel.setUser_id("2222");
nameListOb.add(userModel);
userModel = new UserModel();
userModel.setUser_name("kkk");
userModel.setUser_id("23333");
nameListOb.add(userModel);

topicModel = new TopicModel();
TopicModel topicModel = new TopicModel();
topicModel.setTopicId("333");
topicModel.setTopicName("话题话题");
topicListOb.add(topicModel);

spanAtUserCallback.set(imvvmView.getSpanAtUserCallBack());
spanTopicCallback.set(imvvmView.getSpanTopicCallBack());
spanUrlCallback.set(imvvmView.getSpanUrlCallBack());

}

private ITextViewShow iTextViewShow = new ITextViewShow() {
@Override
public void setText(CharSequence charSequence) {
imvvmView.setText(charSequence);
}

@Override
public CharSequence getText() {
return imvvmView.getText();
}

@Override
public void setMovementMethod(MovementMethod movementMethod) {
imvvmView.setMovementMethod(movementMethod);
}

@Override
public void setAutoLinkMask(int flag) {
imvvmView.setAutoLinkMask(flag);
}
};

/**
* 设置显示文本
*
* @param text
*/
private void setCurrentText(String text) {
RichTextBuilder richTextBuilder = new RichTextBuilder(context);
Spannable spannable = richTextBuilder.setContent(text)
.setAtColor(Color.RED)
.setLinkColor(Color.BLUE)
.setTopicColor(Color.YELLOW)
.setListUser(nameList)
.setListTopic(topicModels)
.setSpanAtUserCallBack(imvvmView.getSpanAtUserCallBack())
.setSpanUrlCallBack(imvvmView.getSpanUrlCallBack())
.setSpanTopicCallBack(imvvmView.getSpanTopicCallBack())
.buildSpan(iTextViewShow);
setLocalCurrentTextString(spannable);
currentTextViewString.set(text);
}

private void setLocalCurrentTextString(CharSequence charSequence) {
currentTextString.set(charSequence);
}

private CharSequence getLocalCurrentTextString() {
return currentTextString.get();
}

private void setForLinkFlag(int flag) {
linkFlag.set(flag);
}

/**
* 插入文本点击
*/
Expand Down
41 changes: 16 additions & 25 deletions app/src/main/res/layout/activity_mvvm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,37 @@
android:id="@+id/mvvm_rich_text_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/insert_text_btn"
android:layout_margin="10dp"
android:text="@{viewmodel.currentTextTitle}"
android:textColor="#FFFFFF"
android:textSize="18sp" />

<TextView
android:id="@+id/mvvm_rich_text"

<com.shuyu.textutillib.RichTextView
android:id="@+id/mvvm_rich_text_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/mvvm_rich_text_title"
android:layout_margin="10dp"
android:autoLink="@{viewmodel.linkFlag}"
android:minLines="8"
android:text="@{viewmodel.currentTextString}"
android:textColor="#FFFFFF"
android:textSize="16sp" />
android:textSize="16sp"
app:atColor="@{viewmodel.atColor}"
app:linkColor="@{viewmodel.linkColor}"
app:nameList="@{viewmodel.nameListOb}"
app:needNumberShow="@{viewmodel.needNumberShow}"
app:richText="@{viewmodel.currentTextViewString}"
app:spanAtUserCallBackListener="@{viewmodel.spanAtUserCallback}"
app:spanTopicCallBackListener="@{viewmodel.spanTopicCallback}"
app:spanUrlCallBackListener="@{viewmodel.spanUrlCallback}"
app:topicColor="@{viewmodel.topicColor}"
app:topicList="@{viewmodel.topicListOb}" />


<View
android:id="@+id/mvvm_rich_text_base_line"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/mvvm_rich_text" />
android:layout_below="@+id/mvvm_rich_text_content" />

<Button
android:id="@+id/mvvm_rich_text_insert_text_btn"
Expand All @@ -50,22 +58,5 @@
android:layout_margin="10dp"
android:onClick="@{() -> viewmodel.insertTextClick()}"
android:text="插入切换文本" />

<com.shuyu.textutillib.RichTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/mvvm_rich_text_insert_text_btn"
android:minLines="8"
android:textColor="#FFFFFF"
android:textSize="16sp"
app:richText="@{viewmodel.currentTextViewString}"
app:nameList="@{viewmodel.nameListOb}"
app:topicList="@{viewmodel.topicListOb}"
app:atColor="@{viewmodel.atColor}"
app:topicColor="@{viewmodel.topicColor}"
app:linkColor="@{viewmodel.linkColor}"
app:needNumberShow="@{viewmodel.needNumberShow}"
/>

</RelativeLayout>
</layout>
3 changes: 3 additions & 0 deletions textUtilsLib/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
<attr name="atColor" format="color" />
<attr name="topicColor" format="color" />
<attr name="linkColor" format="color" />
<attr name="spanUrlCallBackListener" format="reference" />
<attr name="spanAtUserCallBackListener" format="reference" />
<attr name="spanTopicCallBackListener" format="reference" />
</declare-styleable>

</resources>

0 comments on commit a7960b9

Please sign in to comment.