From 097c4a7f160d4d4315a8b788239a9de9c6df385d Mon Sep 17 00:00:00 2001 From: hayden <2867571834@qq.com> Date: Tue, 4 Apr 2023 09:28:35 +0800 Subject: [PATCH] 4.4 --- app/build.gradle | 3 +- app/src/main/AndroidManifest.xml | 28 +++-- .../myapplication/IdolTagMainActivity.java | 105 ++++++++++++++++++ .../example/myapplication/LoginActivity.java | 9 +- .../example/myapplication/MineActivity.java | 4 + .../myapplication/RigsterActivity.java | 1 + .../myapplication/adapter/IdolAdapter.java | 76 +++++++++++++ .../com/example/myapplication/bean/Tag.java | 30 +++++ .../myapplication/fragment/ShowFragment.java | 46 ++++++++ .../res/layout/activity_idol_tag_main.xml | 22 ++++ app/src/main/res/layout/fragment_show.xml | 14 +++ app/src/main/res/layout/item_layout.xml | 29 +++++ app/src/main/res/layout/mine.xml | 19 ++-- app/src/main/res/layout/user_login.xml | 2 +- app/src/main/res/layout/user_rigster.xml | 2 +- app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 4 +- 17 files changed, 363 insertions(+), 32 deletions(-) create mode 100644 app/src/main/java/com/example/myapplication/IdolTagMainActivity.java create mode 100644 app/src/main/java/com/example/myapplication/adapter/IdolAdapter.java create mode 100644 app/src/main/java/com/example/myapplication/bean/Tag.java create mode 100644 app/src/main/java/com/example/myapplication/fragment/ShowFragment.java create mode 100644 app/src/main/res/layout/activity_idol_tag_main.xml create mode 100644 app/src/main/res/layout/fragment_show.xml create mode 100644 app/src/main/res/layout/item_layout.xml diff --git a/app/build.gradle b/app/build.gradle index d524d30..350da04 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,7 @@ android { defaultConfig { applicationId "com.example.myapplication" - minSdk 21 + minSdk 25 targetSdk 33 versionCode 1 versionName "1.0" @@ -33,6 +33,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + implementation 'androidx.wear.tiles:tiles-material:1.1.0-alpha04' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c919e0b..114e752 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,36 +7,34 @@ android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@drawable/app_icon" - android:roundIcon="@drawable/app_icon" android:label="@string/app_name" + android:roundIcon="@drawable/app_icon" android:supportsRtl="true" android:theme="@style/AppTheme" tools:targetApi="31"> - + + - - + + - + - - + - - - + android:exported="true" /> - - - + android:exported="true" /> \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/IdolTagMainActivity.java b/app/src/main/java/com/example/myapplication/IdolTagMainActivity.java new file mode 100644 index 0000000..aeaff2f --- /dev/null +++ b/app/src/main/java/com/example/myapplication/IdolTagMainActivity.java @@ -0,0 +1,105 @@ +package com.example.myapplication; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; + +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.FrameLayout; +import android.widget.ListView; + +import com.example.myapplication.adapter.IdolAdapter; +import com.example.myapplication.bean.Tag; +import com.example.myapplication.fragment.ShowFragment; + +import java.util.ArrayList; +import java.util.List; + +public class IdolTagMainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { + ListView mListview; + FrameLayout mFrame; + List mlist = new ArrayList();//Listview的数据集合 + List fragmentList = new ArrayList<>(); //用于存放碎片,设置多个碎片的原因是右侧有很多显示都要fragment + + IdolAdapter idolAdapter; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_idol_tag_main); + initView(); + initDate(); + } + + //控件初始化 + private void initView(){ + mListview = findViewById(R.id.mListview); + mFrame = findViewById(R.id.mFrame); + } + + //初始化数据 + private void initDate(){ + //初始化数据结合 + listViewDate(); + //加载fragment + addFragment(); + //默认选中页面0 + replese(0); + } + + //切换fragment + private void replese(int position) { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + //隐藏所有的fragment + for(int i = 0; i < fragmentList.size(); i++){ + Fragment fragment = fragmentList.get(i); + transaction.hide(fragment); + } + transaction.show(fragmentList.get(position)); + transaction.commit(); + } + + //加载fragment + private void addFragment() { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + //new一个ShowFragment是为了调用里面的ShowFragment方法 + ShowFragment showFragment = new ShowFragment(); + for(int i = 0; i < mlist.size(); i++){ + Fragment fragment = showFragment.getShowFragment(mlist.get(i).getType()); + fragmentList.add(fragment); + } + for(int i = 0; i < fragmentList.size(); i++){ + transaction.add(R.id.mFrame, fragmentList.get(i)); + } + transaction.commit(); + } + + + //初始化数据结合 + private void listViewDate() { + mlist.add(new Tag("最佳男歌手")); + mlist.add(new Tag("最佳女歌手")); + mlist.add(new Tag("最佳男团")); + mlist.add(new Tag("最佳女团")); + + idolAdapter = new IdolAdapter(mlist,this); + mListview.setAdapter(idolAdapter); + mListview.setOnItemClickListener(this); + } + + + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + //点击item切换fragment + replese(position); + for(int i = 0; i < mlist.size(); i++){ + //先将所有的item标记为未被选中 + mlist.get(i).setChecked(false); + } + //找出被选中的item,把idol中的的ischecked属性改为true + mlist.get(position).setChecked(true); + //刷新适配器 + idolAdapter.notifyDataSetChanged(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/LoginActivity.java b/app/src/main/java/com/example/myapplication/LoginActivity.java index 45f72f8..1a54171 100644 --- a/app/src/main/java/com/example/myapplication/LoginActivity.java +++ b/app/src/main/java/com/example/myapplication/LoginActivity.java @@ -15,7 +15,7 @@ public class LoginActivity extends AppCompatActivity implements View.OnClickList protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.user_login); - findViewById(R.id.login).setOnClickListener(this); + findViewById(R.id.login).setOnClickListener(this); //给login图标添加监听器 findViewById(R.id.rigster).setOnClickListener(this); } @@ -24,8 +24,11 @@ public class LoginActivity extends AppCompatActivity implements View.OnClickList public void onClick(View view) { if(view.getId() == R.id.rigster){ startActivity(new Intent(this,RigsterActivity.class)); - }else{ - startActivity(new Intent(this,MineActivity.class)); + }else if(view.getId() == R.id.login){ + //验证密码功能待补充 + Intent intent = new Intent(this,MineActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); } } } diff --git a/app/src/main/java/com/example/myapplication/MineActivity.java b/app/src/main/java/com/example/myapplication/MineActivity.java index 10eee42..77508aa 100644 --- a/app/src/main/java/com/example/myapplication/MineActivity.java +++ b/app/src/main/java/com/example/myapplication/MineActivity.java @@ -13,11 +13,15 @@ public class MineActivity extends AppCompatActivity implements View.OnClickListe protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mine); + findViewById(R.id.vote).setOnClickListener(this); findViewById(R.id.outload).setOnClickListener(this); } @Override public void onClick(View view) { + if(view.getId() == R.id.vote){ + startActivity(new Intent(this,IdolTagMainActivity.class)); + } if(view.getId() == R.id.outload){ //待修改,因為這樣數據還在 finish(); diff --git a/app/src/main/java/com/example/myapplication/RigsterActivity.java b/app/src/main/java/com/example/myapplication/RigsterActivity.java index 689e221..88cb43d 100644 --- a/app/src/main/java/com/example/myapplication/RigsterActivity.java +++ b/app/src/main/java/com/example/myapplication/RigsterActivity.java @@ -100,6 +100,7 @@ public class RigsterActivity extends AppCompatActivity implements View.OnClickLi //注册验证 public void validateRegister(){ Intent intent = new Intent(RigsterActivity.this,LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); String username = usernameEdit.getText().toString(); String password = passEdit.getText().toString(); String surePassword = surePasswordEdit.getText().toString(); diff --git a/app/src/main/java/com/example/myapplication/adapter/IdolAdapter.java b/app/src/main/java/com/example/myapplication/adapter/IdolAdapter.java new file mode 100644 index 0000000..5945c2d --- /dev/null +++ b/app/src/main/java/com/example/myapplication/adapter/IdolAdapter.java @@ -0,0 +1,76 @@ +package com.example.myapplication.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.example.myapplication.bean.Tag; +import com.example.myapplication.R; + +import java.util.List; + +public class IdolAdapter extends BaseAdapter { + List mList; + Context mContext; + + public IdolAdapter(List mList, Context mContext) { + this.mList = mList; + this.mContext = mContext; + } + + @Override + public int getCount() { + return mList !=null ? mList.size() : 0; + } + + @Override + public Object getItem(int i) { + return null; + } + + @Override + public long getItemId(int i) { + return 0; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHoder holder; + if(view == null){ //如果view = null,说明是第一次加载 + holder = new ViewHoder(); + //加载布局页面 + view = LayoutInflater.from(mContext).inflate(R.layout.item_layout,null); + holder.tvText = view.findViewById(R.id.tv_text); + holder.tvLine = view.findViewById(R.id.tv_line); + holder.Menu = view.findViewById(R.id.menu); + view.setTag(holder); + }else{ + holder = (ViewHoder) view.getTag(); + } + //从数据集合中获取idol对象,判断idol中ischecked属性,判断是否被选中 + if(mList.get(i).isChecked()){ + holder.tvText.setTextColor(Color.BLUE); + holder.tvLine.setVisibility(View.VISIBLE); + holder.Menu.setBackgroundColor(Color.WHITE); + }else{ + holder.tvText.setTextColor(Color.BLACK); + holder.tvLine.setVisibility(View.INVISIBLE); + holder.Menu.setBackgroundColor(Color.parseColor("#ebebeb")); + } + String type = mList.get(i).getType(); //取出对象idol里的数据 + holder.tvText.setText(type); + return view; + } + + //用于放item_layout里的控件 + class ViewHoder{ + TextView tvText; + TextView tvLine; + LinearLayout Menu; + } +} diff --git a/app/src/main/java/com/example/myapplication/bean/Tag.java b/app/src/main/java/com/example/myapplication/bean/Tag.java new file mode 100644 index 0000000..7bdd391 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/bean/Tag.java @@ -0,0 +1,30 @@ +package com.example.myapplication.bean; + +public class Tag { + + //爱豆的种类名称 + private String type; + //标记当前的type(item)是否被选中 + private boolean isChecked; + + public Tag(String type) { + this.type = type; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public boolean isChecked() { + return isChecked; + } + + public void setChecked(boolean checked) { + isChecked = checked; + } +} + diff --git a/app/src/main/java/com/example/myapplication/fragment/ShowFragment.java b/app/src/main/java/com/example/myapplication/fragment/ShowFragment.java new file mode 100644 index 0000000..c13a4a8 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/fragment/ShowFragment.java @@ -0,0 +1,46 @@ +package com.example.myapplication.fragment; + +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.fragment.app.Fragment; + +import com.example.myapplication.R; + +public class ShowFragment extends Fragment { + TextView tvText; + String type; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle bundle = getArguments(); + if(bundle != null ){ + type = bundle.getString("type"); + } + } + + + + public static Fragment getShowFragment(String type){ + ShowFragment showFragment = new ShowFragment(); + Bundle bundle = new Bundle(); + bundle.putString("type",type); + showFragment.setArguments(bundle); + return showFragment; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_show,null); + tvText = view.findViewById(R.id.tv_content); + tvText.setText(type); + return view; + } +} diff --git a/app/src/main/res/layout/activity_idol_tag_main.xml b/app/src/main/res/layout/activity_idol_tag_main.xml new file mode 100644 index 0000000..45525a2 --- /dev/null +++ b/app/src/main/res/layout/activity_idol_tag_main.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_show.xml b/app/src/main/res/layout/fragment_show.xml new file mode 100644 index 0000000..d5414fc --- /dev/null +++ b/app/src/main/res/layout/fragment_show.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_layout.xml b/app/src/main/res/layout/item_layout.xml new file mode 100644 index 0000000..375a712 --- /dev/null +++ b/app/src/main/res/layout/item_layout.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mine.xml b/app/src/main/res/layout/mine.xml index 58cb99e..98c8f15 100644 --- a/app/src/main/res/layout/mine.xml +++ b/app/src/main/res/layout/mine.xml @@ -28,7 +28,7 @@ android:layout_height="wrap_content" android:layout_marginTop="20dp"> @@ -72,7 +72,7 @@ android:layout_height="wrap_content" android:layout_marginTop="5dp">