diff --git a/app/build.gradle b/app/build.gradle index 4082ecb..535de31 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,7 +23,7 @@ android { sourceSets { main { res { - srcDirs 'src/main/res', 'src/main/res/layout/resetpwd', 'src/main/res/layout/resetpwd/layout', 'src/main/res/layout/main', 'src/main/res/layout/main/layout' + srcDirs 'src/main/res', 'src/main/res/layout/resetpwd', 'src/main/res/layout/resetpwd/layout', 'src/main/res/layout/main', 'src/main/res/layout/main/layout', 'src/main/res/layout/main/layout/forum', 'src/main/res/layout/main/layout/forum/layout' } } } @@ -41,6 +41,7 @@ dependencies { implementation 'androidx.navigation:navigation-fragment:2.2.1' implementation 'androidx.navigation:navigation-ui:2.2.1' implementation 'androidx.vectordrawable:vectordrawable:1.1.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.13' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' diff --git a/app/src/main/java/com/community/pocket/ui/main/MainFragment.java b/app/src/main/java/com/community/pocket/ui/main/MainFragment.java index 019afff..909d6d0 100644 --- a/app/src/main/java/com/community/pocket/ui/main/MainFragment.java +++ b/app/src/main/java/com/community/pocket/ui/main/MainFragment.java @@ -1,39 +1,60 @@ package com.community.pocket.ui.main; -import android.os.Bundle; -import android.view.LayoutInflater; +import android.os.Build; import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; +import android.widget.Button; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.Observer; +import androidx.annotation.RequiresApi; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import com.community.pocket.R; import com.community.pocket.ui.BaseFragment; -import org.jetbrains.annotations.NotNull; +import java.util.Objects; +/** + * 二级菜单基础框架 + */ public abstract class MainFragment extends BaseFragment { - @NotNull - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - - View root = super.onCreateView(inflater, container, savedInstanceState); - final TextView textView = root.findViewById(viewId()); - MutableLiveData mText = new MutableLiveData<>(); - mText.setValue(this.getClass().getName()); - mText.observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - - return root; + /** + * @return FragmentContainerView id + */ + protected abstract int fragmentId(); + + private NavController navController; + + /** + * @return 路由控制器 + */ + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + protected NavController ctrl() { + if (navController == null) { + navController = Navigation.findNavController(Objects.requireNonNull(getView()).findViewById(fragmentId())); + } + return navController; } - protected abstract int viewId(); + /** + * 点击按钮改变字体颜色 + */ + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + protected void changeColor(View view) { + int color = getResources().getColor(R.color.button_unchecked); + for (int id : button_ids()) { + View v = Objects.requireNonNull(getView()).findViewById(id); + v.setBackgroundColor(color); + } + + if (view instanceof Button) { + Button button = (Button) view; + button.setBackgroundColor(getResources().getColor(R.color.colorAccent)); + } + } + + /** + * 按钮组id + */ + protected abstract int[] button_ids(); } diff --git a/app/src/main/java/com/community/pocket/ui/main/TestMainFragment.java b/app/src/main/java/com/community/pocket/ui/main/TestMainFragment.java new file mode 100644 index 0000000..aa43cf8 --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/TestMainFragment.java @@ -0,0 +1,44 @@ +package com.community.pocket.ui.main; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.Observer; + +import com.community.pocket.ui.BaseFragment; + +import org.jetbrains.annotations.NotNull; + +/** + * 主界面框架 + */ +//TODO 测试类 +public abstract class TestMainFragment extends BaseFragment { + + @NotNull + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + //文本框打印类信息 + View root = super.onCreateView(inflater, container, savedInstanceState); + final TextView textView = root.findViewById(viewId()); + MutableLiveData mText = new MutableLiveData<>(); + mText.setValue(this.getClass().getName()); + mText.observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); + + return root; + } + + protected abstract int viewId(); +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/dashboard/DashboardFragment.java b/app/src/main/java/com/community/pocket/ui/main/ui/dashboard/DashboardFragment.java index 7840edc..9327501 100644 --- a/app/src/main/java/com/community/pocket/ui/main/ui/dashboard/DashboardFragment.java +++ b/app/src/main/java/com/community/pocket/ui/main/ui/dashboard/DashboardFragment.java @@ -1,13 +1,13 @@ package com.community.pocket.ui.main.ui.dashboard; import com.community.pocket.R; -import com.community.pocket.ui.main.MainFragment; +import com.community.pocket.ui.main.TestMainFragment; import org.xutils.view.annotation.ContentView; @ContentView(R.layout.fragment_dashboard) -public class DashboardFragment extends MainFragment { +public class DashboardFragment extends TestMainFragment { @Override protected int viewId() { return R.id.text_dashboard; diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumFragment.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumFragment.java new file mode 100644 index 0000000..e9cd514 --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumFragment.java @@ -0,0 +1,62 @@ +package com.community.pocket.ui.main.ui.forum; + +import android.os.Build; +import android.view.View; + +import androidx.annotation.RequiresApi; + +import com.community.pocket.R; +import com.community.pocket.ui.main.MainFragment; + +import org.xutils.view.annotation.ContentView; +import org.xutils.view.annotation.Event; + +/** + * 论坛框架 + */ +@ContentView(R.layout.forum) +public class ForumFragment extends MainFragment { + + //跳转热榜界面 + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + @Event(value = R.id.forum_hot) + private void hot(View view) { + ctrl().navigate(R.id.forumHotFragment); + changeColor(view); + } + + //跳转最新界面 + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + @Event(value = R.id.forum_new) + private void _new(View view) { + ctrl().navigate(R.id.forumNewFragment); + changeColor(view); + } + + + //跳转发帖界面 + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + @Event(value = R.id.forum_post) + private void post(View view) { + ctrl().navigate(R.id.forumPostFragment); + changeColor(view); + } + + //跳转我的帖子界面 + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + @Event(value = R.id.forum_my) + private void my(View view) { + ctrl().navigate(R.id.forumMyFragment); + changeColor(view); + } + + @Override + protected int fragmentId() { + return R.id.fragment; + } + + @Override + protected int[] button_ids() { + return new int[]{R.id.forum_hot, R.id.forum_new, R.id.forum_post, R.id.forum_my}; + } +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumHotFragment.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumHotFragment.java new file mode 100644 index 0000000..8c50a2b --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumHotFragment.java @@ -0,0 +1,20 @@ +package com.community.pocket.ui.main.ui.forum; + +import com.community.pocket.R; +import com.community.pocket.ui.main.TestMainFragment; + +import org.xutils.view.annotation.ContentView; + +/** + * 热门帖子 + */ +@ContentView(R.layout.forum_hot_fragment) +public class ForumHotFragment extends TestMainFragment { + + @Override + protected int viewId() { + return R.id.text_hot; + } + + +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumHotViewModel.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumHotViewModel.java new file mode 100644 index 0000000..f76ae78 --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumHotViewModel.java @@ -0,0 +1,7 @@ +package com.community.pocket.ui.main.ui.forum; + +import androidx.lifecycle.ViewModel; + +public class ForumHotViewModel extends ViewModel { + // TODO: Implement the ViewModel +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumMyFragment.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumMyFragment.java new file mode 100644 index 0000000..f5fea97 --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumMyFragment.java @@ -0,0 +1,17 @@ +package com.community.pocket.ui.main.ui.forum; + +import com.community.pocket.R; +import com.community.pocket.ui.main.TestMainFragment; + +import org.xutils.view.annotation.ContentView; + +/** + * 我的帖子 + */ +@ContentView(R.layout.forum_my_fragment) +public class ForumMyFragment extends TestMainFragment { + @Override + protected int viewId() { + return R.id.text_my; + } +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumMyViewModel.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumMyViewModel.java new file mode 100644 index 0000000..a35de28 --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumMyViewModel.java @@ -0,0 +1,7 @@ +package com.community.pocket.ui.main.ui.forum; + +import androidx.lifecycle.ViewModel; + +public class ForumMyViewModel extends ViewModel { + // TODO: Implement the ViewModel +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumNewFragment.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumNewFragment.java new file mode 100644 index 0000000..bac4de6 --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumNewFragment.java @@ -0,0 +1,19 @@ +package com.community.pocket.ui.main.ui.forum; + +import com.community.pocket.R; +import com.community.pocket.ui.main.TestMainFragment; + +import org.xutils.view.annotation.ContentView; + +/** + * 最新帖子 + */ +@ContentView(R.layout.forum_new_fragment) +public class ForumNewFragment extends TestMainFragment { + + @Override + protected int viewId() { + return R.id.text_new; + } + +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumNewViewModel.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumNewViewModel.java new file mode 100644 index 0000000..455b36a --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumNewViewModel.java @@ -0,0 +1,7 @@ +package com.community.pocket.ui.main.ui.forum; + +import androidx.lifecycle.ViewModel; + +public class ForumNewViewModel extends ViewModel { + // TODO: Implement the ViewModel +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumPostFragment.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumPostFragment.java new file mode 100644 index 0000000..de138db --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumPostFragment.java @@ -0,0 +1,19 @@ +package com.community.pocket.ui.main.ui.forum; + +import com.community.pocket.R; +import com.community.pocket.ui.main.TestMainFragment; + +import org.xutils.view.annotation.ContentView; + +/** + * 发送帖子 + */ +@ContentView(R.layout.forum_post_fragment) +public class ForumPostFragment extends TestMainFragment { + + @Override + protected int viewId() { + return R.id.text_post; + } + +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumPostViewModel.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumPostViewModel.java new file mode 100644 index 0000000..f62bb59 --- /dev/null +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumPostViewModel.java @@ -0,0 +1,7 @@ +package com.community.pocket.ui.main.ui.forum; + +import androidx.lifecycle.ViewModel; + +public class ForumPostViewModel extends ViewModel { + // TODO: Implement the ViewModel +} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/home/HomeViewModel.java b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumViewModel.java similarity index 71% rename from app/src/main/java/com/community/pocket/ui/main/ui/home/HomeViewModel.java rename to app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumViewModel.java index b92a438..91df794 100644 --- a/app/src/main/java/com/community/pocket/ui/main/ui/home/HomeViewModel.java +++ b/app/src/main/java/com/community/pocket/ui/main/ui/forum/ForumViewModel.java @@ -1,14 +1,14 @@ -package com.community.pocket.ui.main.ui.home; +package com.community.pocket.ui.main.ui.forum; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; -public class HomeViewModel extends ViewModel { +public class ForumViewModel extends ViewModel { private MutableLiveData mText; - public HomeViewModel() { + public ForumViewModel() { mText = new MutableLiveData<>(); mText.setValue("This is home fragment"); } diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/home/HomeFragment.java b/app/src/main/java/com/community/pocket/ui/main/ui/home/HomeFragment.java deleted file mode 100644 index 152cb7d..0000000 --- a/app/src/main/java/com/community/pocket/ui/main/ui/home/HomeFragment.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.community.pocket.ui.main.ui.home; - -import com.community.pocket.R; -import com.community.pocket.ui.main.MainFragment; - -import org.xutils.view.annotation.ContentView; - -@ContentView(R.layout.fragment_home) -public class HomeFragment extends MainFragment { - - @Override - protected int viewId() { - return R.id.text_home; - } -} diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/info/InfoFragment.java b/app/src/main/java/com/community/pocket/ui/main/ui/info/InfoFragment.java index f5d2aab..7a364a1 100644 --- a/app/src/main/java/com/community/pocket/ui/main/ui/info/InfoFragment.java +++ b/app/src/main/java/com/community/pocket/ui/main/ui/info/InfoFragment.java @@ -1,12 +1,12 @@ package com.community.pocket.ui.main.ui.info; import com.community.pocket.R; -import com.community.pocket.ui.main.MainFragment; +import com.community.pocket.ui.main.TestMainFragment; import org.xutils.view.annotation.ContentView; @ContentView(R.layout.info_fragment) -public class InfoFragment extends MainFragment { +public class InfoFragment extends TestMainFragment { @Override protected int viewId() { diff --git a/app/src/main/java/com/community/pocket/ui/main/ui/notifications/NotificationsFragment.java b/app/src/main/java/com/community/pocket/ui/main/ui/notifications/NotificationsFragment.java index 3dba6d2..a90fab8 100644 --- a/app/src/main/java/com/community/pocket/ui/main/ui/notifications/NotificationsFragment.java +++ b/app/src/main/java/com/community/pocket/ui/main/ui/notifications/NotificationsFragment.java @@ -1,13 +1,13 @@ package com.community.pocket.ui.main.ui.notifications; import com.community.pocket.R; -import com.community.pocket.ui.main.MainFragment; +import com.community.pocket.ui.main.TestMainFragment; import org.xutils.view.annotation.ContentView; @ContentView(R.layout.fragment_notifications) -public class NotificationsFragment extends MainFragment { +public class NotificationsFragment extends TestMainFragment { @Override protected int viewId() { diff --git a/app/src/main/res/layout/main/layout/activity_main_menu.xml b/app/src/main/res/layout/main/layout/activity_main_menu.xml index 1555ee6..85ba01d 100644 --- a/app/src/main/res/layout/main/layout/activity_main_menu.xml +++ b/app/src/main/res/layout/main/layout/activity_main_menu.xml @@ -7,30 +7,37 @@ android:layout_height="match_parent" android:paddingTop="?attr/actionBarSize"> - - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/main/layout/forum/layout/forum.xml b/app/src/main/res/layout/main/layout/forum/layout/forum.xml new file mode 100644 index 0000000..4eab839 --- /dev/null +++ b/app/src/main/res/layout/main/layout/forum/layout/forum.xml @@ -0,0 +1,28 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main/layout/forum/layout/forum_hot_fragment.xml b/app/src/main/res/layout/main/layout/forum/layout/forum_hot_fragment.xml new file mode 100644 index 0000000..b9a49b5 --- /dev/null +++ b/app/src/main/res/layout/main/layout/forum/layout/forum_hot_fragment.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main/layout/forum/layout/forum_my_fragment.xml b/app/src/main/res/layout/main/layout/forum/layout/forum_my_fragment.xml new file mode 100644 index 0000000..d7bfa22 --- /dev/null +++ b/app/src/main/res/layout/main/layout/forum/layout/forum_my_fragment.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main/layout/forum/layout/forum_new_fragment.xml b/app/src/main/res/layout/main/layout/forum/layout/forum_new_fragment.xml new file mode 100644 index 0000000..2cf6279 --- /dev/null +++ b/app/src/main/res/layout/main/layout/forum/layout/forum_new_fragment.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main/layout/forum/layout/forum_post_fragment.xml b/app/src/main/res/layout/main/layout/forum/layout/forum_post_fragment.xml new file mode 100644 index 0000000..8422582 --- /dev/null +++ b/app/src/main/res/layout/main/layout/forum/layout/forum_post_fragment.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main/layout/forum/layout/titlebar.xml b/app/src/main/res/layout/main/layout/forum/layout/titlebar.xml new file mode 100644 index 0000000..1f0cf71 --- /dev/null +++ b/app/src/main/res/layout/main/layout/forum/layout/titlebar.xml @@ -0,0 +1,56 @@ + + + +