[mobile] support mange detail - part 2

pull/142/head
FongMi 2 years ago
parent 3eaca1ec68
commit 98a0b3c305
  1. 84
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  3. 55
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/EpisodeAdapter.java
  4. 17
      app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseEpisodeHolder.java
  5. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/base/ViewType.java
  6. 28
      app/src/mobile/java/com/fongmi/android/tv/ui/holder/EpisodeGridHolder.java
  7. 30
      app/src/mobile/java/com/fongmi/android/tv/ui/holder/EpisodeHoriHolder.java
  8. 28
      app/src/mobile/java/com/fongmi/android/tv/ui/holder/EpisodeVertHolder.java
  9. 200
      app/src/mobile/res/layout/activity_detail.xml
  10. 0
      app/src/mobile/res/layout/adapter_episode_hori.xml
  11. 11
      app/src/mobile/res/layout/adapter_episode_vert.xml

@ -4,23 +4,25 @@ import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.util.Log;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.Episode;
import com.fongmi.android.tv.bean.Flag;
import com.fongmi.android.tv.bean.History;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.databinding.ActivityDetailBinding;
import com.fongmi.android.tv.db.AppDatabase;
import com.fongmi.android.tv.event.ErrorEvent;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.ui.adapter.EpisodeAdapter;
import com.fongmi.android.tv.ui.adapter.FlagAdapter;
@ -29,14 +31,16 @@ import com.fongmi.android.tv.ui.base.ViewType;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.utils.ImgUtil;
import com.fongmi.android.tv.utils.Notify;
import com.google.gson.Gson;
public class DetailActivity extends BaseActivity implements EpisodeAdapter.OnClickListener {
import java.util.List;
public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickListener, EpisodeAdapter.OnClickListener {
private ActivityDetailBinding mBinding;
private EpisodeAdapter mEpisodeAdapter;
private SiteViewModel mViewModel;
private FlagAdapter mFlagAdapter;
private History mHistory;
public static void start(Activity activity, String key, String id, String name) {
start(activity, key, id, name, null, null);
@ -104,6 +108,7 @@ public class DetailActivity extends BaseActivity implements EpisodeAdapter.OnCli
@Override
protected void initView(Bundle savedInstanceState) {
mBinding.progressLayout.showProgress();
setRecyclerView();
setViewModel();
getDetail();
}
@ -113,14 +118,14 @@ public class DetailActivity extends BaseActivity implements EpisodeAdapter.OnCli
}
private void setRecyclerView() {
//mBinding.flag.setHasFixedSize(true);
//mBinding.flag.setItemAnimator(null);
//mBinding.flag.addItemDecoration(new SpaceItemDecoration(8));
//mBinding.flag.setAdapter(mFlagAdapter = new FlagAdapter(this));
mBinding.flag.setHasFixedSize(true);
mBinding.flag.setItemAnimator(null);
mBinding.flag.addItemDecoration(new SpaceItemDecoration(8));
mBinding.flag.setAdapter(mFlagAdapter = new FlagAdapter(this));
mBinding.episode.setHasFixedSize(true);
mBinding.episode.setItemAnimator(null);
mBinding.episode.addItemDecoration(new SpaceItemDecoration(8));
mBinding.episode.setAdapter(mEpisodeAdapter = new EpisodeAdapter(this, ViewType.LIST));
mBinding.episode.addItemDecoration(new SpaceItemDecoration(1,8));
mBinding.episode.setAdapter(mEpisodeAdapter = new EpisodeAdapter(this, ViewType.VERT));
}
private void setViewModel() {
@ -139,8 +144,6 @@ public class DetailActivity extends BaseActivity implements EpisodeAdapter.OnCli
}
private void setDetail(Result result) {
mBinding.swipeLayout.setRefreshing(false);
Log.e("DDD", new Gson().toJson(result));
if (result.getList().isEmpty()) setEmpty();
else setDetail(result.getList().get(0));
Notify.show(result.getMsg());
@ -155,7 +158,6 @@ public class DetailActivity extends BaseActivity implements EpisodeAdapter.OnCli
}
private void showEmpty() {
mBinding.swipeLayout.setEnabled(true);
mBinding.progressLayout.showEmpty();
}
@ -166,10 +168,10 @@ public class DetailActivity extends BaseActivity implements EpisodeAdapter.OnCli
setText(mBinding.content, 0, Html.fromHtml(item.getVodContent()).toString());
setText(mBinding.director, R.string.detail_director, Html.fromHtml(item.getVodDirector()).toString());
ImgUtil.load(item.getVodPic(getPic()), mBinding.pic);
//mFlagAdapter.addAll(item.getVodFlags());
//checkHistory(item);
//checkFlag(item);
//checkKeepImg();
mFlagAdapter.addAll(item.getVodFlags());
checkHistory(item);
checkFlag(item);
checkKeepImg();
}
private void setText(TextView view, int resId, String text) {
@ -178,6 +180,56 @@ public class DetailActivity extends BaseActivity implements EpisodeAdapter.OnCli
view.setTag(text);
}
private void checkHistory(Vod item) {
mHistory = History.find(getHistoryKey());
mHistory = mHistory == null ? createHistory(item) : mHistory;
if (!TextUtils.isEmpty(getMark())) mHistory.setVodRemarks(getMark());
}
private History createHistory(Vod item) {
History history = new History();
history.setKey(getHistoryKey());
history.setCid(ApiConfig.getCid());
history.setVodPic(item.getVodPic());
history.setVodName(item.getVodName());
history.findEpisode(item.getVodFlags());
return history;
}
private void checkFlag(Vod item) {
boolean empty = item.getVodFlags().isEmpty();
mBinding.flag.setVisibility(empty ? View.GONE : View.VISIBLE);
if (empty) {
ErrorEvent.episode();
} else {
onItemClick(mHistory.getFlag(), true);
if (mHistory.isRevSort()) reverseEpisode(true);
}
}
private void reverseEpisode(boolean scroll) {
mFlagAdapter.reverse();
setEpisodeAdapter(getFlag().getEpisodes());
if (scroll) mBinding.episode.scrollToPosition(mEpisodeAdapter.getPosition());
}
private void setEpisodeAdapter(List<Episode> items) {
mBinding.episode.setVisibility(items.isEmpty() ? View.GONE : View.VISIBLE);
mEpisodeAdapter.addAll(items);
}
private void checkKeepImg() {
//mBinding.keep.setImageResource(Keep.find(getHistoryKey()) == null ? R.drawable.ic_control_keep_off : R.drawable.ic_control_keep_on);
}
@Override
public void onItemClick(Flag item, boolean force) {
if (item.isActivated()) return;
mFlagAdapter.setActivated(item);
mBinding.flag.scrollToPosition(mFlagAdapter.getPosition());
setEpisodeAdapter(item.getEpisodes());
}
@Override
public void onItemClick(Episode item) {

@ -337,7 +337,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mBinding.episode.setHasFixedSize(true);
mBinding.episode.setItemAnimator(null);
mBinding.episode.addItemDecoration(new SpaceItemDecoration(8));
mBinding.episode.setAdapter(mEpisodeAdapter = new EpisodeAdapter(this, ViewType.LIST));
mBinding.episode.setAdapter(mEpisodeAdapter = new EpisodeAdapter(this, ViewType.HORI));
mBinding.quality.setHasFixedSize(true);
mBinding.quality.setItemAnimator(null);
mBinding.quality.addItemDecoration(new SpaceItemDecoration(8));

@ -2,24 +2,27 @@ package com.fongmi.android.tv.ui.adapter;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.Product;
import com.fongmi.android.tv.bean.Episode;
import com.fongmi.android.tv.databinding.AdapterEpisodeGridBinding;
import com.fongmi.android.tv.databinding.AdapterEpisodeListBinding;
import com.fongmi.android.tv.databinding.AdapterEpisodeHoriBinding;
import com.fongmi.android.tv.databinding.AdapterEpisodeVertBinding;
import com.fongmi.android.tv.ui.base.BaseEpisodeHolder;
import com.fongmi.android.tv.ui.base.ViewType;
import com.fongmi.android.tv.ui.holder.EpisodeGridHolder;
import com.fongmi.android.tv.ui.holder.EpisodeHoriHolder;
import com.fongmi.android.tv.ui.holder.EpisodeVertHolder;
import java.util.ArrayList;
import java.util.List;
public class EpisodeAdapter extends RecyclerView.Adapter<EpisodeAdapter.ViewHolder> {
public class EpisodeAdapter extends RecyclerView.Adapter<BaseEpisodeHolder> {
private final List<Episode> mItems;
private final OnClickListener mListener;
private final List<Episode> mItems;
private final int viewType;
public EpisodeAdapter(OnClickListener listener, int viewType) {
@ -79,41 +82,21 @@ public class EpisodeAdapter extends RecyclerView.Adapter<EpisodeAdapter.ViewHold
return viewType;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == ViewType.LIST) return new ViewHolder(AdapterEpisodeListBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
return new ViewHolder(AdapterEpisodeGridBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
public void onBindViewHolder(@NonNull BaseEpisodeHolder holder, int position) {
holder.initView(mItems.get(position));
}
@NonNull
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Episode item = mItems.get(position);
if (holder.gridBinding != null) holder.initView(holder.gridBinding.text, item, false);
if (holder.listBinding != null) holder.initView(holder.listBinding.text, item, true);
}
class ViewHolder extends RecyclerView.ViewHolder {
private AdapterEpisodeListBinding listBinding;
private AdapterEpisodeGridBinding gridBinding;
ViewHolder(@NonNull AdapterEpisodeListBinding binding) {
super(binding.getRoot());
this.listBinding = binding;
}
ViewHolder(@NonNull AdapterEpisodeGridBinding binding) {
super(binding.getRoot());
this.gridBinding = binding;
}
void initView(TextView view, Episode item, boolean ems) {
view.setSelected(item.isActivated());
view.setActivated(item.isActivated());
if (ems) view.setMaxEms(Product.getEms());
view.setText(item.getDesc().concat(item.getName()));
view.setOnClickListener(v -> mListener.onItemClick(item));
public BaseEpisodeHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
switch (viewType) {
case ViewType.HORI:
return new EpisodeHoriHolder(AdapterEpisodeHoriBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false), mListener);
case ViewType.VERT:
return new EpisodeVertHolder(AdapterEpisodeVertBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false), mListener);
default:
return new EpisodeGridHolder(AdapterEpisodeGridBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false), mListener);
}
}
}

@ -0,0 +1,17 @@
package com.fongmi.android.tv.ui.base;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.bean.Episode;
public abstract class BaseEpisodeHolder extends RecyclerView.ViewHolder {
public BaseEpisodeHolder(@NonNull View itemView) {
super(itemView);
}
public abstract void initView(Episode item);
}

@ -7,6 +7,9 @@ public class ViewType {
public static final int LIST = 2;
public static final int GRID = 3;
public static final int HORI = 0;
public static final int VERT = 1;
public static final int DARK = 0;
public static final int LIGHT = 1;
}

@ -0,0 +1,28 @@
package com.fongmi.android.tv.ui.holder;
import androidx.annotation.NonNull;
import com.fongmi.android.tv.bean.Episode;
import com.fongmi.android.tv.databinding.AdapterEpisodeGridBinding;
import com.fongmi.android.tv.ui.adapter.EpisodeAdapter;
import com.fongmi.android.tv.ui.base.BaseEpisodeHolder;
public class EpisodeGridHolder extends BaseEpisodeHolder {
private final EpisodeAdapter.OnClickListener listener;
private final AdapterEpisodeGridBinding binding;
public EpisodeGridHolder(@NonNull AdapterEpisodeGridBinding binding, EpisodeAdapter.OnClickListener listener) {
super(binding.getRoot());
this.binding = binding;
this.listener = listener;
}
@Override
public void initView(Episode item) {
binding.text.setSelected(item.isActivated());
binding.text.setActivated(item.isActivated());
binding.text.setText(item.getDesc().concat(item.getName()));
binding.text.setOnClickListener(v -> listener.onItemClick(item));
}
}

@ -0,0 +1,30 @@
package com.fongmi.android.tv.ui.holder;
import androidx.annotation.NonNull;
import com.fongmi.android.tv.Product;
import com.fongmi.android.tv.bean.Episode;
import com.fongmi.android.tv.databinding.AdapterEpisodeHoriBinding;
import com.fongmi.android.tv.ui.adapter.EpisodeAdapter;
import com.fongmi.android.tv.ui.base.BaseEpisodeHolder;
public class EpisodeHoriHolder extends BaseEpisodeHolder {
private final EpisodeAdapter.OnClickListener listener;
private final AdapterEpisodeHoriBinding binding;
public EpisodeHoriHolder(@NonNull AdapterEpisodeHoriBinding binding, EpisodeAdapter.OnClickListener listener) {
super(binding.getRoot());
this.binding = binding;
this.listener = listener;
}
@Override
public void initView(Episode item) {
binding.text.setMaxEms(Product.getEms());
binding.text.setSelected(item.isActivated());
binding.text.setActivated(item.isActivated());
binding.text.setText(item.getDesc().concat(item.getName()));
binding.text.setOnClickListener(v -> listener.onItemClick(item));
}
}

@ -0,0 +1,28 @@
package com.fongmi.android.tv.ui.holder;
import androidx.annotation.NonNull;
import com.fongmi.android.tv.bean.Episode;
import com.fongmi.android.tv.databinding.AdapterEpisodeVertBinding;
import com.fongmi.android.tv.ui.adapter.EpisodeAdapter;
import com.fongmi.android.tv.ui.base.BaseEpisodeHolder;
public class EpisodeVertHolder extends BaseEpisodeHolder {
private final EpisodeAdapter.OnClickListener listener;
private final AdapterEpisodeVertBinding binding;
public EpisodeVertHolder(@NonNull AdapterEpisodeVertBinding binding, EpisodeAdapter.OnClickListener listener) {
super(binding.getRoot());
this.binding = binding;
this.listener = listener;
}
@Override
public void initView(Episode item) {
binding.text.setSelected(item.isActivated());
binding.text.setActivated(item.isActivated());
binding.text.setText(item.getDesc().concat(item.getName()));
binding.text.setOnClickListener(v -> listener.onItemClick(item));
}
}

@ -1,123 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/swipeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
android:fitsSystemWindows="true"
android:orientation="vertical">
<com.fongmi.android.tv.ui.custom.ProgressLayout
android:id="@+id/progressLayout"
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:fillViewport="true">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/pic"
android:layout_width="120dp"
android:layout_height="168dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:elevation="4dp"
android:scaleType="centerCrop"
app:shapeAppearance="@style/Vod.Grid" />
<LinearLayout
android:id="@+id/info"
<com.fongmi.android.tv.ui.custom.ProgressLayout
android:id="@+id/progressLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_toEndOf="@+id/pic"
android:gravity="center_vertical"
android:minHeight="168dp"
android:orientation="vertical">
android:layout_height="match_parent">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"
tools:text="海賊王" />
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/pic"
android:layout_width="120dp"
android:layout_height="168dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:elevation="4dp"
android:scaleType="centerCrop"
app:shapeAppearance="@style/Vod.Grid" />
<TextView
android:id="@+id/director"
android:layout_width="wrap_content"
<LinearLayout
android:id="@+id/info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="尾田榮一郎" />
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_toEndOf="@+id/pic"
android:gravity="center_vertical"
android:minHeight="168dp"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"
tools:text="海賊王" />
<TextView
android:id="@+id/director"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="尾田榮一郎" />
<TextView
android:id="@+id/site"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="漫畫人" />
</LinearLayout>
<TextView
android:id="@+id/site"
android:layout_width="wrap_content"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:singleLine="true"
android:layout_below="@+id/info"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:ellipsize="end"
android:lineSpacingExtra="4dp"
android:maxLines="2"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="漫畫人" />
</LinearLayout>
<LinearLayout
android:id="@+id/action"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/info"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp">
tools:text="相傳22年前,在一個童話般的世界裡,曾經擁有一切的海賊王在走上斷頭台的時候對人們狂笑道:“想要我的財寶是嗎,想要就給你們!去找吧,全世界的寶藏都在那裡!”……自此開始,全世界勇敢的男人都離開了平庸的生活,走向了大海,向著埋藏海賊王寶藏的偉大航道挺進!世界簡直成為了大海賊時代!在某個村子的小孩莫奇。 D.路飛對“海賊王”甚為仰慕,立志要成為新一代的海賊王。因此他希望駐紮在村子的海盜團能帶他出海,可是遭船長紅發撒古斯拒絕。有一天路飛不小心偷吃了撒古斯帶來的戰利品-惡魔果實,成為了永遠不能游泳的橡皮人,令他的海盜夢想泡湯。後來路飛被一群討厭撒古斯的人捉了,在被海獸吃掉之際,被撒古斯救走,而撒古斯的手也犧牲了。撒古斯臨行前將草帽送給路飛,使他重燃起當海賊王的決心。事隔十年,苦練一身橡皮絕技的少年路飛揚帆出發,開始找尋One Piece的冒險…… 傳說開始了! !大家帶著新的誓言,終到達了“偉大航道”的入口。路飛他們攀山、過海,眼看就要闖進去了,面前郤出現了一個黑團? !圍繞著“大秘寶one piece”而展開的海洋冒險故事現在開始!" />
<com.google.android.material.button.MaterialButton
android:layout_width="0dp"
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/flag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:backgroundTint="@color/transparent"
android:text="@string/keep"
app:icon="@drawable/ic_action_keep"
app:iconGravity="textTop" />
android:layout_below="@+id/content"
android:layout_marginTop="16dp"
android:clipChildren="false"
android:clipToPadding="false"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingEnd="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/adapter_flag" />
<com.google.android.material.button.MaterialButton
android:layout_width="0dp"
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/episode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:backgroundTint="@color/transparent"
android:text="@string/keep"
app:icon="@drawable/ic_action_keep"
app:iconGravity="textTop" />
</LinearLayout>
<TextView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/action"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:ellipsize="end"
android:lineSpacingExtra="4dp"
android:maxLines="2"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="相傳22年前,在一個童話般的世界裡,曾經擁有一切的海賊王在走上斷頭台的時候對人們狂笑道:“想要我的財寶是嗎,想要就給你們!去找吧,全世界的寶藏都在那裡!”……自此開始,全世界勇敢的男人都離開了平庸的生活,走向了大海,向著埋藏海賊王寶藏的偉大航道挺進!世界簡直成為了大海賊時代!在某個村子的小孩莫奇。 D.路飛對“海賊王”甚為仰慕,立志要成為新一代的海賊王。因此他希望駐紮在村子的海盜團能帶他出海,可是遭船長紅發撒古斯拒絕。有一天路飛不小心偷吃了撒古斯帶來的戰利品-惡魔果實,成為了永遠不能游泳的橡皮人,令他的海盜夢想泡湯。後來路飛被一群討厭撒古斯的人捉了,在被海獸吃掉之際,被撒古斯救走,而撒古斯的手也犧牲了。撒古斯臨行前將草帽送給路飛,使他重燃起當海賊王的決心。事隔十年,苦練一身橡皮絕技的少年路飛揚帆出發,開始找尋One Piece的冒險…… 傳說開始了! !大家帶著新的誓言,終到達了“偉大航道”的入口。路飛他們攀山、過海,眼看就要闖進去了,面前郤出現了一個黑團? !圍繞著“大秘寶one piece”而展開的海洋冒險故事現在開始!" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/episode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:stackFromEnd="true" />
android:layout_below="@+id/flag"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:clipChildren="false"
android:clipToPadding="false"
android:nestedScrollingEnabled="false"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/adapter_episode_vert" />
</com.fongmi.android.tv.ui.custom.ProgressLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</com.fongmi.android.tv.ui.custom.ProgressLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_item"
android:ellipsize="marquee"
android:textColor="@color/text"
android:textSize="14sp"
tools:text="20" />
Loading…
Cancel
Save