diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7214c31..922d70a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -39,7 +39,7 @@ - + @@ -52,8 +52,7 @@ + android:configChanges="orientation|keyboard|keyboardHidden|navigation" /> @@ -74,7 +73,6 @@ android:label="Jianshu"> - diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/Author_introductionActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/Author_introductionActivity.kt new file mode 100644 index 0000000..9d2536f --- /dev/null +++ b/app/src/main/java/com/zjgsu/jianshu/Activity/Author_introductionActivity.kt @@ -0,0 +1,87 @@ +package com.zjgsu.jianshu + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.util.Log +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import cn.bmob.v3.Bmob +import cn.bmob.v3.BmobQuery +import cn.bmob.v3.exception.BmobException +import cn.bmob.v3.listener.FindListener +import com.bumptech.glide.Glide +import com.zjgsu.jianshu.Bmob.Author_bmob +import com.zjgsu.jianshu.Bmob.Book_info_bmob +import kotlinx.android.synthetic.main.activity_anthor_introduction.* +import kotlinx.android.synthetic.main.activity_book_info.* + +class Author_introductionActivity : AppCompatActivity() { + private var authorworkList = ArrayList() + private lateinit var userId:String + private lateinit var adapter: Book_authorAdapter + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_anthor_introduction) + Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob + userId = getSharedPreferences("userinf", Context.MODE_PRIVATE).getString("user_id", "").toString() + adapter = Book_authorAdapter(authorworkList,userId) + val layoutManager = + StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)//第一个参数是列数 + authorwork_recyclerView.layoutManager = layoutManager + authorwork_recyclerView.adapter = adapter + inits() + author_back.setOnClickListener { + val bookName=intent.getStringExtra("book_name") + val intent = Intent(this, BookInformationActivity::class.java) + intent.putExtra("Book_name", bookName) + startActivity(intent) + finish() + } + } + private fun inits() { + val author_name=intent.getStringExtra("author_name") + book_authorname1.text = author_name + val authorQuery = BmobQuery() + authorQuery.addWhereEqualTo("author_name",author_name) + authorQuery.findObjects(object : FindListener() { + override fun done(list: List, e: BmobException?) { + if (e == null) { + val author=list[0] + author_intro.text=author.author_introduce + loadAuthorPic(author.picture.url) + val authorworkQuery=BmobQuery() + authorworkQuery.addWhereEqualTo("authorid",author.objectId) + authorworkQuery.findObjects(object :FindListener(){ + override fun done(books:List,e:BmobException?){ + if(e==null){ + authorworkList.clear() + books?.let { + authorworkList.addAll(it.map { b -> + // 使用安全调用和Elvis操作符提供默认值或进行错误处理 + val url = b.picture?.url ?: "default_url_or_handling_case" + AuthorWork(b.name,author_name.toString(), url) + }) + } + adapter.notifyDataSetChanged() + } + else{ + } + } + }) + } else { + Log.d("error", "error") + } +// expand_text_view.text=author_selfintro + } + }) + } + private fun loadAuthorPic(coverUrl: String) { + Glide.with(this) // 传入 Context + .load(coverUrl) // 加载图片的 URL + .placeholder(R.drawable.pre_load) // 设置占位图 + .error(R.drawable.fail_load) // 设置加载失败时显示的图片 + .into(author_img) // 将图片加载到指定的 ImageView 中 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/BookInformationActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/BookInformationActivity.kt index 37ddf9b..aca380e 100644 --- a/app/src/main/java/com/zjgsu/jianshu/Activity/BookInformationActivity.kt +++ b/app/src/main/java/com/zjgsu/jianshu/Activity/BookInformationActivity.kt @@ -28,6 +28,7 @@ class BookInformationActivity : AppCompatActivity() { private lateinit var bookName: String private lateinit var authorName: String private lateinit var userId:String + private lateinit var picurl:String override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_book_info) @@ -70,6 +71,7 @@ class BookInformationActivity : AppCompatActivity() { if (e == null && books != null && books.isNotEmpty()) { val book = books[0] loadBookCover(book.picture.url) + picurl=book.picture.url if (book.buxing + book.tuijian + book.buxing != 0) { var tuijian_res: Double = 0.0 tuijian_res = (book.tuijian) * 100.0 / (book.buxing + book.tuijian + book.yiban) @@ -108,11 +110,12 @@ class BookInformationActivity : AppCompatActivity() { private fun setClickListeners() { book_authorname.setOnClickListener { - val intent = Intent(this, author_introductionActivity::class.java) + val intent = Intent(this, Author_introductionActivity::class.java) intent.putExtra("author_name", authorName) + intent.putExtra("book_name",bookName) startActivity(intent) } - + //TODO:不一定回到MainActivity::class,后面还要在跳转前保存上一个页面 bookinfo_return.setOnClickListener { val intent = Intent(this, MainActivity::class.java) startActivity(intent) @@ -142,6 +145,7 @@ class BookInformationActivity : AppCompatActivity() { val bookshelfRecord = BookShelf() bookshelfRecord.setb_name(bookName) bookshelfRecord.setuserid(userId) + bookshelfRecord.setpicurl(picurl) bookshelfRecord.save(object : SaveListener() { override fun done(objectId: String?, saveException: BmobException?) { if (saveException == null) { diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/BookShelfActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/BookShelfActivity.kt index b1c0228..79aeab9 100644 --- a/app/src/main/java/com/zjgsu/jianshu/Activity/BookShelfActivity.kt +++ b/app/src/main/java/com/zjgsu/jianshu/Activity/BookShelfActivity.kt @@ -33,11 +33,13 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import android.view.MotionEvent import android.view.View.OnTouchListener +import android.widget.Button +import androidx.appcompat.app.AlertDialog +import cn.bmob.v3.listener.UpdateListener import kotlinx.android.synthetic.main.layout_bottom_navigation.* class BookShelfActivity : AppCompatActivity() { - val Booklist = ArrayList() - val Booklist2 = ArrayList() + val booklist = ArrayList() lateinit var adapter:BookshelfAdapter lateinit var userId:String override fun onCreate(savedInstanceState: Bundle?) { @@ -45,95 +47,34 @@ class BookShelfActivity : AppCompatActivity() { setContentView(R.layout.activity_bookshelf) Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob userId = getSharedPreferences("userinf", Context.MODE_PRIVATE).getString("user_id", "").toString() - inits() + loadBookshelf() val layoutManager=GridLayoutManager(this,3) - recyclerView2.layoutManager=layoutManager - adapter=BookshelfAdapter(this,Booklist) - recyclerView2.adapter=adapter - adapter.setRecyclerViewOnItemClickListener(object : BookshelfAdapter.RecyclerViewOnItemClickListener { - override fun onItemClickListener(view: View?, position: Int) { - Log.d("zyzh","12311") - adapter.setSelectItem(position) - } - - override fun onItemLongClickListener(view: View?, position: Int): Boolean { - Log.d("zy11","123121") - adapter.setShowBox() - adapter.setSelectItem(position) - adapter.notifyDataSetChanged() - return true - } - }) - - swipeRefresh2.setOnRefreshListener { - refreshBookShelf(adapter) + bookshelf_recyclerView.layoutManager=layoutManager + adapter=BookshelfAdapter(this,booklist) + bookshelf_recyclerView.adapter=adapter + bookshelf_swipeRefresh.setOnRefreshListener { + loadBookshelf() } setupBottomNavigation() + select() } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { - menuInflater.inflate(R.menu.nav_bookshelf,menu) - return true - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when(item.getItemId()) { - R.id.addBook-> { - val intent = Intent(this, MainActivity::class.java) - startActivity(intent) - finish() - } - R.id.editor->{ - adapter.initMap() - adapter.setShowBox() - adapter.notifyDataSetChanged() -// bookshelf_checkBox.visibility=View.VISIBLE - } - } - return super.onContextItemSelected(item); - } - private fun inits() { + private fun loadBookshelf(){ + booklist.clear() val bmobQuery = BmobQuery() bmobQuery.addWhereEqualTo("userid", userId) bmobQuery.findObjects(object : FindListener() { - override fun done(list: List, e: BmobException?) { + override fun done(books: List?, e: BmobException?) { + bookshelf_swipeRefresh.isRefreshing = false if (e == null) { - for (i in list) { - Booklist.add(Book_Shelf(i.b_name)) - val adapter =BookshelfAdapter(this@BookShelfActivity,Booklist) - recyclerView2.adapter = adapter + booklist.clear() + books?.let { + booklist.addAll(it.map { b -> + val url = b.picurl?: "default_url_or_handling_case" + Book_Shelf(b.b_name,url) + }) } - Booklist.add(Book_Shelf("添加")) - Booklist2.add(Book_Shelf("添加")) - val adapter =BookshelfAdapter(this@BookShelfActivity,Booklist) - recyclerView2.adapter = adapter - } - } - }) - } - private fun refreshBookShelf(adapter: BookshelfAdapter) { - thread { - Thread.sleep(2000) - runOnUiThread { - initbookshelf() - adapter.notifyDataSetChanged() - swipeRefresh2.isRefreshing = false - Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show() - } - } - } - private fun initbookshelf(){ - Booklist.clear() - val bmobQuery = BmobQuery() - bmobQuery.addWhereEqualTo("userid", userId) - bmobQuery.findObjects(object : FindListener() { - override fun done(list: List, e: BmobException?) { - if (e == null) { - for (i in list) { - Booklist.add(Book_Shelf(i.b_name)) - } - Booklist.add(Book_Shelf("添加")) - val adapter =BookshelfAdapter(this@BookShelfActivity,Booklist) - recyclerView2.adapter = adapter + booklist.add(Book_Shelf("添加", "")) + adapter.notifyDataSetChanged() }else { Log.d("error", "error") } @@ -155,4 +96,90 @@ class BookShelfActivity : AppCompatActivity() { NavigationHelper.navigateTo(this, MyActivity::class.java) } } + + private fun select(){ + bookshelf_select.setOnClickListener{ + default_title.visibility=View.GONE + selected_title.visibility = View.VISIBLE + bookshelf_layout_bottom_navigation.visibility=View.GONE + selected_bottom_navigation.visibility=View.VISIBLE + adapter.toggleSelectMode() + } + bookshelf_cancel.setOnClickListener { + default_title.visibility=View.VISIBLE + selected_title.visibility = View.GONE + bookshelf_layout_bottom_navigation.visibility=View.VISIBLE + selected_bottom_navigation.visibility=View.GONE + adapter.toggleSelectMode() + } + adapter.onSelectionChanged = { selectedCount -> + select_books.text = if (selectedCount > 0) "已选择 $selectedCount 本书籍" else "选择书籍" + } + } + fun onRemoveFromBookshelfClicked(view: View) { + //TODO:目前是用消息弹窗的方式,其他方法:若没有选中书籍时,可以设置移除按钮不可选中 + if (adapter.selectedItems.isEmpty()) { + // 如果没有选中图书,弹出提示并返回 + Toast.makeText(this, "请先选择要移除的图书", Toast.LENGTH_SHORT).show() + return + } + adapter.selectedItems.toList().also { positionList -> + // 创建并显示删除确认对话框 + val builder = AlertDialog.Builder(this) + val dialogView = layoutInflater.inflate(R.layout.delete_dialog, null) + builder.setView(dialogView) + + val dialog = builder.create() + dialogView.findViewById(R.id.dialog_message)?.text = "是否将《${booklist[positionList.first()].bkname}》移出书架?" + dialogView.findViewById