Add embedded example for android
This commit is contained in:
@@ -32,6 +32,9 @@
|
||||
<activity
|
||||
android:name=".DoricPanelListActivity"
|
||||
android:theme="@style/Theme.Design.Light.NoActionBar" />
|
||||
<activity
|
||||
android:name=".DoricEmbeddedActivity"
|
||||
android:theme="@style/Theme.Design.Light.NoActionBar" />
|
||||
</application>
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
@@ -0,0 +1,107 @@
|
||||
package pub.doric.demo;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.github.pengfeizhou.jscore.JSONBuilder;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
|
||||
import pub.doric.DoricPanel;
|
||||
import pub.doric.DoricSingleton;
|
||||
import pub.doric.async.AsyncResult;
|
||||
import pub.doric.utils.DoricLog;
|
||||
|
||||
public class DoricEmbeddedActivity extends AppCompatActivity {
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_doric_panel_list);
|
||||
|
||||
RecyclerView recyclerView = findViewById(R.id.doric_panel_rv);
|
||||
recyclerView.setBackgroundColor(Color.WHITE);
|
||||
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(
|
||||
2,
|
||||
StaggeredGridLayoutManager.VERTICAL));
|
||||
recyclerView.setNestedScrollingEnabled(true);
|
||||
recyclerView.setAdapter(new MyAdapter());
|
||||
}
|
||||
|
||||
private static class DoricHolder extends RecyclerView.ViewHolder {
|
||||
private final DoricPanel panel;
|
||||
|
||||
public DoricHolder(@NonNull DoricPanel panel) {
|
||||
super(panel);
|
||||
this.panel = panel;
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
final DoricPanel doricPanel = new DoricPanel(parent.getContext());
|
||||
doricPanel.setLayoutParams(new ViewGroup.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||
doricPanel.setMinimumHeight(100);
|
||||
final String source;
|
||||
final String alias;
|
||||
if (viewType == 0) {
|
||||
source = "assets://src/CellModule1Demo.js";
|
||||
alias = "CellModule1Demo.js";
|
||||
} else {
|
||||
source = "assets://src/CellModule2Demo.js";
|
||||
alias = "CellModule2Demo.js";
|
||||
}
|
||||
|
||||
DoricSingleton.getInstance().getJSLoaderManager().loadJSBundle(source).setCallback(new AsyncResult.Callback<String>() {
|
||||
@Override
|
||||
public void onResult(String result) {
|
||||
doricPanel.config(result, alias, "{}");
|
||||
doricPanel.getDoricContext().getRootNode().setReusable(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable t) {
|
||||
DoricLog.e("Doric load JS error:" + t.getLocalizedMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
|
||||
}
|
||||
});
|
||||
return new DoricHolder(doricPanel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
return position % 2 == 0 ? 0 : 1;
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
|
||||
if (holder instanceof DoricHolder) {
|
||||
((DoricHolder) holder).panel.getDoricContext().callEntity("setData", new JSONBuilder()
|
||||
.put("imageUrl", (holder.getItemViewType() == 0)
|
||||
? "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fblog%2F202107%2F09%2F20210709142454_dc8dc.thumb.1000_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1660279617&t=8caf9c88dbeb00c6436f76e90c54eecc"
|
||||
: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202005%2F02%2F20200502185802_FuFU2.thumb.1000_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1660279617&t=77131edf568efeda32c3a6513412f324")
|
||||
.put("title", "" + (position + 1))
|
||||
.put("content", "第" + (position + 1) + "\n" + "++++++++可填充内容++++++++" + ((holder.getItemViewType() == 0) ? "\n+++再加一行+++" : ""))
|
||||
.toJSONObject());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return 1000;
|
||||
}
|
||||
}
|
||||
}
|
@@ -124,7 +124,16 @@ public class MainActivity extends AppCompatActivity {
|
||||
tv.getContext().startActivity(intent);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
} else if (position == 2) {
|
||||
tv.setText("Embedded Example");
|
||||
tv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(tv.getContext(), DoricEmbeddedActivity.class);
|
||||
tv.getContext().startActivity(intent);
|
||||
}
|
||||
});
|
||||
}else {
|
||||
tv.setText(data[position - 2]);
|
||||
tv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
@@ -141,7 +150,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return data.length + 2;
|
||||
return data.length + 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user