书架功能完善,作者简介功能完善

This commit is contained in:
zhangsan 2024-04-28 14:40:27 +08:00
parent 7f5c6d6459
commit 985582f8de
29 changed files with 647 additions and 682 deletions

View File

@ -39,7 +39,7 @@
<activity android:name=".PhilosophyActivity"/>
<!-- <activity android:name=".BookShelfActivity"/>-->
<activity android:name=".ScienceActivity"/>
<activity android:name=".author_introductionActivity"/>
<activity android:name=".Author_introductionActivity"/>
<!-- <activity android:name=".MainActivity"-->
<!-- android:exported="true"-->
<!-- android:label="@string/app_name"-->
@ -52,8 +52,7 @@
<!-- </activity>-->
<activity android:name=".BookIntroActivity"/>
<activity android:name=".MainActivity"
android:configChanges="orientation|keyboard|keyboardHidden|navigation"
android:windowSoftInputMode="adjustPan|stateVisible"/>
android:configChanges="orientation|keyboard|keyboardHidden|navigation" />
<activity android:name=".RegisterActivity" />
<activity android:name=".BookShelfActivity"/>
<activity android:name=".Activity.Perception_informationActivity"/>
@ -74,7 +73,6 @@
android:label="Jianshu">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

View File

@ -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<AuthorWork>()
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<Author_bmob>()
authorQuery.addWhereEqualTo("author_name",author_name)
authorQuery.findObjects(object : FindListener<Author_bmob>() {
override fun done(list: List<Author_bmob>, e: BmobException?) {
if (e == null) {
val author=list[0]
author_intro.text=author.author_introduce
loadAuthorPic(author.picture.url)
val authorworkQuery=BmobQuery<Book_info_bmob>()
authorworkQuery.addWhereEqualTo("authorid",author.objectId)
authorworkQuery.findObjects(object :FindListener<Book_info_bmob>(){
override fun done(books:List<Book_info_bmob>,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 中
}
}

View File

@ -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<String>() {
override fun done(objectId: String?, saveException: BmobException?) {
if (saveException == null) {

View File

@ -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<Book_Shelf>()
val Booklist2 = ArrayList<Book_Shelf>()
val booklist = ArrayList<Book_Shelf>()
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<BookShelf>()
bmobQuery.addWhereEqualTo("userid", userId)
bmobQuery.findObjects(object : FindListener<BookShelf>() {
override fun done(list: List<BookShelf>, e: BmobException?) {
override fun done(books: List<BookShelf>?, 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.add(Book_Shelf("添加"))
Booklist2.add(Book_Shelf("添加"))
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)
})
}
private fun refreshBookShelf(adapter: BookshelfAdapter) {
thread {
Thread.sleep(2000)
runOnUiThread {
initbookshelf()
booklist.add(Book_Shelf("添加", ""))
adapter.notifyDataSetChanged()
swipeRefresh2.isRefreshing = false
Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show()
}
}
}
private fun initbookshelf(){
Booklist.clear()
val bmobQuery = BmobQuery<BookShelf>()
bmobQuery.addWhereEqualTo("userid", userId)
bmobQuery.findObjects(object : FindListener<BookShelf>() {
override fun done(list: List<BookShelf>, 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
}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<TextView>(R.id.dialog_message)?.text = "是否将《${booklist[positionList.first()].bkname}》移出书架?"
dialogView.findViewById<Button>(R.id.dialog_cancel)?.setOnClickListener {
dialog.dismiss()
}
dialogView.findViewById<Button>(R.id.dialog_remove)?.setOnClickListener {
// 从 BookShelf 表中删除图书的逻辑
positionList.sorted().reversed().forEach { position ->
val bmobQuery = BmobQuery<BookShelf>()
bmobQuery.addWhereEqualTo("userid", userId)
bmobQuery.addWhereEqualTo("b_name", booklist[position].bkname)
bmobQuery.findObjects(object : FindListener<BookShelf>() {
override fun done(books: List<BookShelf>?, e: BmobException?) {
if (e == null) {
books?.firstOrNull()?.also { book ->
book.delete(object : UpdateListener() {
override fun done(e: BmobException?) {
if (e == null) {
// 删除成功
booklist.removeAt(position)
adapter.selectedItems.remove(position)
adapter.selectedItems.forEach { selectedPosition ->
if (selectedPosition > position) {
adapter.selectedItems.remove(selectedPosition)
adapter.selectedItems.add(selectedPosition - 1)
}
}
Toast.makeText(
this@BookShelfActivity,
"移除成功",
Toast.LENGTH_SHORT
).show()
adapter.notifyDataSetChanged()
adapter.onSelectionChanged?.invoke(adapter.selectedItems.size)
} else {
// 删除失败
}
dialog.dismiss()
}
})
}
} else {
// 查询失败
dialog.dismiss()
}
}
})
}
}
dialog.show()
}
}
}

View File

@ -39,7 +39,6 @@ class LoginActivity : AppCompatActivity() {
private fun handleLogin() {
val userAccount = et_blackOutName.text.toString()
val userPassword = et_UserPassword.text.toString()
if (userAccount.isEmpty() || userPassword.isEmpty()) {
Toast.makeText(this, "账号或密码不能为空白", Toast.LENGTH_SHORT).show()
return

View File

@ -179,7 +179,6 @@ class MainActivity : AppCompatActivity() {
)
goodbookList.add(bookRank)
}
listOfBookRankList.add(goodbookList)
billboardAdapter.notifyDataSetChanged() // 确保在这里更新适配器
}

View File

@ -19,12 +19,10 @@ import kotlin.concurrent.thread
class PerceptionActivity : AppCompatActivity() {
private val PerceptionList = ArrayList<Perception>()
lateinit var userId:String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_perception)
Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
userId = getSharedPreferences("userinf", Context.MODE_PRIVATE).getString("user_id", "").toString()
inits()
val layoutManager=LinearLayoutManager(this)
perception_recyclerView.layoutManager = layoutManager
@ -36,15 +34,9 @@ class PerceptionActivity : AppCompatActivity() {
}
Log.d("myLog",perception_recyclerView.adapter.toString())
fab.setOnClickListener {
Toast.makeText(this,"新建随笔",Toast.LENGTH_SHORT).show()
}
fab.setOnClickListener {
val intent=Intent(this,sendPerceptionActivity::class.java)
intent.putExtra("userid", userId)
startActivity(intent)
finish()
}
setupBottomNavigation()
}

View File

@ -1,101 +0,0 @@
package com.zjgsu.jianshu
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.Bundle
import android.util.Log
import android.widget.Toast
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.zjgsu.jianshu.Bmob.Book_info_bmob
import kotlinx.android.synthetic.main.activity_anthor_introduction.*
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.book_author_item.*
import kotlinx.android.synthetic.main.expandable.*
import java.io.InputStream
import java.net.HttpURLConnection
import java.net.URL
class author_introductionActivity : AppCompatActivity() {
private var bookList = ArrayList<BookAuthor>()
private var author_selfintro:String=""
private val url_list = mutableListOf<String>()
private var flag: Int =0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_anthor_introduction)
Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
book_authorname1.text = intent.getStringExtra("author_name")
inits()
val layoutManager =
StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)//第一个参数是列数
recyclerView1.layoutManager = layoutManager
var adapter = Book_authorAdapter(bookList)
recyclerView1.adapter = adapter
expand_collapse.setOnClickListener{
val myDialog:MyDialog= MyDialog(this)
myDialog.setTitle("作者介绍")
myDialog.setMessage(author_selfintro)
myDialog.setCancel("cancel",MyDialog.IOnCancelListener {
fun onCancel(dialog:MyDialog) {
Toast.makeText(this,"取消",Toast.LENGTH_SHORT).show()
}
})
myDialog.setConfirm("confirm",MyDialog.IOnConfirmListener {
fun OnConfirm(dialog:MyDialog){
Toast.makeText(this,"确认",Toast.LENGTH_SHORT).show()
}
})
myDialog.show()
}
}
private fun inits() {
val bmobQuery = BmobQuery<Book_info_bmob>()
bmobQuery.addWhereEqualTo("author_name",book_authorname1.text.toString())
bmobQuery.findObjects(object : FindListener<Book_info_bmob>() {
override fun done(list: List<Book_info_bmob>, e: BmobException?) {
if (e == null) {
for (i in list) {
if(flag==0){
author_selfintro=i.author_introduce
flag=1
url_list.add(i!!.picture.url)
//加载authorPic
object : Thread() {
override fun run() {
try {
//作者
val url = URL(i!!.authorpic.url)
Log.d("myLog", url.toString())
val connection: HttpURLConnection =
url.openConnection() as HttpURLConnection
connection.setRequestMethod("GET")
connection.setConnectTimeout(5000)
val `in`: InputStream = connection.getInputStream()
val bitmap: Bitmap =
BitmapFactory.decodeStream(`in`)
author_img.setImageBitmap(bitmap)
} catch (e: Exception) {
e.printStackTrace()
}
}
}.start()
}
bookList.add(BookAuthor(i.name, i.author_name))
val adapter = Book_authorAdapter(bookList)
recyclerView1.adapter = adapter
}
} else {
Log.d("error", "error")
}
expand_text_view.text=author_selfintro
}
})
}
}

View File

@ -13,34 +13,35 @@ import cn.bmob.v3.Bmob
import cn.bmob.v3.BmobQuery
import cn.bmob.v3.exception.BmobException
import cn.bmob.v3.listener.FindListener
import cn.bmob.v3.listener.QueryListener
import cn.bmob.v3.listener.SaveListener
import com.bumptech.glide.Glide
import com.zjgsu.jianshu.*
import com.zjgsu.jianshu.Bmob.Book_info_bmob
import com.zjgsu.jianshu.Bmob.Perception_bmob
import com.zjgsu.jianshu.Bmob.User_bmob
import kotlinx.android.synthetic.main.activity_book_info.*
import kotlinx.android.synthetic.main.activity_sendperception.*
import java.io.InputStream
import java.net.HttpURLConnection
import java.net.URL
class sendPerceptionActivity:AppCompatActivity() {
private var bookList = ArrayList<BookAuthor>()
lateinit var myuserid:String
private var bookList = ArrayList<Book_Shelf>()
lateinit var userId:String
private lateinit var adapter: send_perceptionAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sendperception)
supportActionBar?.hide()
Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
userId = getSharedPreferences("userinf", Context.MODE_PRIVATE).getString("user_id", "").toString()
myuserid=intent.getStringExtra("userid").toString()
inits()
adapter = send_perceptionAdapter(bookList)
val layoutManager =
StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)//第一个参数是列数
send_recyclerview.layoutManager = layoutManager
var adapter = send_perceptionAdapter(bookList)
send_recyclerview.adapter = adapter
delete.setOnClickListener {
inits()
send_return.setOnClickListener {
val intent= Intent(this,PerceptionActivity::class.java)
startActivity(intent)
finish()
@ -52,7 +53,7 @@ class sendPerceptionActivity:AppCompatActivity() {
else {
val perception = Perception_bmob()
perception.perception = mycontent.text.toString()
perception.userid = myuserid
perception.userid = userId
perception.b_name = selectedBook
perception.save(object : SaveListener<String>() {
override fun done(objectId: String?, e: BmobException?) {
@ -80,43 +81,35 @@ class sendPerceptionActivity:AppCompatActivity() {
private fun inits(){
val bmobQuery = BmobQuery<Book_info_bmob>()
bmobQuery.findObjects(object : FindListener<Book_info_bmob>() {
override fun done(list: List<Book_info_bmob>, e: BmobException?) {
override fun done(lists: List<Book_info_bmob>, e: BmobException?) {
if (e == null) {
for (i in list) {
bookList.add(BookAuthor(i.name, i.author_name))
val adapter = send_perceptionAdapter(bookList)
send_recyclerview.adapter = adapter
bookList.clear()
lists?.let {
bookList.addAll(it.map { b ->
// 使用安全调用和Elvis操作符提供默认值或进行错误处理
val url = b.picture?.url ?: "default_url_or_handling_case"
Book_Shelf(b.name,url)
})
}
adapter.notifyDataSetChanged()
} else {
Log.d("error", "error")
}
}
})
val query=BmobQuery<User_bmob>()
query.findObjects(object:FindListener<User_bmob>(){
override fun done(list:List<User_bmob>,e:BmobException?){
val queryUser = BmobQuery<User_bmob>()
queryUser.getObject(userId, object : QueryListener<User_bmob>() {
override fun done(user: User_bmob?, e: BmobException?) {
if (e == null) {
for(i in list){
if(i.objectId.equals(userId)) {
object : Thread() {
override fun run() {
try {
val url = URL(i!!.face.url)
val connection: HttpURLConnection =
url.openConnection() as HttpURLConnection
connection.setRequestMethod("GET")
connection.setConnectTimeout(5000)
val `in`: InputStream = connection.getInputStream()
val bitmap: Bitmap =
BitmapFactory.decodeStream(`in`)
touxiang.setImageBitmap(bitmap)
} catch (e: Exception) {
e.printStackTrace()
}
}
}.start()
}
user?.let {
Glide.with(this@sendPerceptionActivity) // 传入 Context
.load(it.face.url) // 加载图片的 URL
.placeholder(R.drawable.pre_load) // 设置占位图
.error(R.drawable.fail_load) // 设置加载失败时显示的图片
.into(send_avatar) // 将图片加载到指定的 ImageView 中
}
} else {
Log.e("QueryUser", e.toString())
}
}
})

View File

@ -15,6 +15,7 @@ import cn.bmob.v3.BmobQuery
import cn.bmob.v3.exception.BmobException
import cn.bmob.v3.listener.FindListener
import cn.bmob.v3.listener.SaveListener
import com.bumptech.glide.Glide
import com.zjgsu.jianshu.Bmob.BookShelf
import com.zjgsu.jianshu.Bmob.Book_bmob
import kotlinx.android.synthetic.main.activity_main.view.*
@ -23,10 +24,9 @@ import java.io.InputStream
import java.net.HttpURLConnection
import java.net.URL
class Book_authorAdapter(val bookList:List<BookAuthor>):RecyclerView.Adapter<Book_authorAdapter.ViewHolder>() {
lateinit var userId:String
class Book_authorAdapter(val authorworkList:List<AuthorWork>,val userId: String):RecyclerView.Adapter<Book_authorAdapter.ViewHolder>() {
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val bookList_Image: ImageView = view.findViewById(R.id.book_Image1)
val workimg: ImageView = view.findViewById(R.id.authorwork_img)
val addButton:Button=view.findViewById(R.id.addButton)
}
@ -35,83 +35,48 @@ class Book_authorAdapter(val bookList:List<BookAuthor>):RecyclerView.Adapter<Boo
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val book = bookList[position]
val query = BmobQuery<Book_bmob>()
query.addWhereEqualTo("name",book.name)
query.findObjects(object : FindListener<Book_bmob>() {
override fun done(p0: MutableList<Book_bmob>?, p1: BmobException?) {
if (p1 == null) {
if (p0 != null && p0.size > 0) {
for (p in p0) {
object : Thread() {
override fun run() {
try {
val url = URL(p!!.picture.url)
val connection: HttpURLConnection =
url.openConnection() as HttpURLConnection
connection.setRequestMethod("GET")
connection.setConnectTimeout(5000)
val `in`: InputStream = connection.getInputStream()
val bitmap: Bitmap =
BitmapFactory.decodeStream(`in`)
holder.bookList_Image.setImageBitmap(bitmap)
} catch (e: Exception) {
e.printStackTrace()
}
}
}.start()
}
}
}
}
})
val authorwork = authorworkList[position]
Glide.with(holder.itemView.context)
.load(authorwork.bookurl) // 确保你的Book对象有正确的图片URL
.placeholder(R.drawable.pre_load) // 可以设置一个占位图
.error(R.drawable.fail_load) // 设置加载失败的图
.into(holder.workimg)
val query1=BmobQuery<BookShelf>()
query1.addWhereEqualTo("userid", userId)
query1.addWhereEqualTo("b_name",book.name)
query1.addWhereEqualTo("b_name",authorwork.book_name)
query1.findObjects(object :FindListener<BookShelf>() {
override fun done(p0: MutableList<BookShelf>?, p1: BmobException?) {
if (p1 == null) {
if (p0 != null && p0.size > 0) {
holder.addButton.isEnabled = false
holder.addButton.setText("已添加")
}
}
}
})
holder.bookList_Image.setOnClickListener {
val intent= Intent(holder.itemView.context,BookInformationActivity::class.java)
intent.putExtra("Book_name",book.name)
ContextCompat.startActivity(holder.itemView.context, intent, null)
}
}else{
holder.addButton.isEnabled = true
holder.addButton.setOnClickListener {
// val intent = Intent(holder.itemView.context,BookShelfActivity::class.java)
// intent.putExtra("Book_name",book.name)
// ContextCompat.startActivity(holder.itemView.context,intent,null)
val query= BmobQuery<BookShelf>()
query.addWhereEqualTo("userid", userId)
query.addWhereEqualTo("b_name",book.name)
query.findObjects(object :FindListener<BookShelf>(){
override fun done(p0: MutableList<BookShelf>?, p1: BmobException?) {
if(p1==null){
if(p0!=null&&p0.size>0){
// Toast.makeText(author_introductionActivity, "11", Toast.LENGTH_SHORT)
}
else{
val bookshelf_record = BookShelf()
bookshelf_record.setb_name(book.name)
bookshelf_record.setb_name(authorwork.book_name)
bookshelf_record.setuserid(userId)
bookshelf_record.setpicurl(authorwork.bookurl)
bookshelf_record.save(object : SaveListener<String>() {
override fun done(objectId: String?, e: BmobException?) {
if (e == null) {
holder.addButton.isEnabled = false
holder.addButton.text = "已添加"
} else {
// 添加失败的处理
}
}
})
}
}
}
}
})
holder.workimg.setOnClickListener {
val intent= Intent(holder.itemView.context,BookInformationActivity::class.java)
intent.putExtra("Book_name",authorwork.book_name)
ContextCompat.startActivity(holder.itemView.context, intent, null)
}
}
override fun getItemCount() =bookList.size
override fun getItemCount() =authorworkList.size
}

View File

@ -2,10 +2,6 @@ package com.zjgsu.jianshu
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.opengl.Visibility
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -14,201 +10,80 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import cn.bmob.v3.BmobQuery
import cn.bmob.v3.exception.BmobException
import cn.bmob.v3.listener.FindListener
import java.io.InputStream
import java.net.HttpURLConnection
import java.net.URL
import android.widget.AdapterView.OnItemLongClickListener
import android.widget.AdapterView.VISIBLE
import android.widget.Toast
import android.view.View.OnLongClickListener
import com.bumptech.glide.Glide
import android.widget.CompoundButton
//TODO:选中书本的时候书本封面变灰
class BookshelfAdapter(val context: Context, val bookshelf: ArrayList<Book_Shelf>) : RecyclerView.Adapter<BookshelfAdapter.ViewHolder>() {
private var isSelectMode: Boolean = false
val selectedItems = mutableSetOf<Int>() //当前选中的书本position列表
var onSelectionChanged: ((Int) -> Unit)? = null
import android.view.animation.Animation
import com.zjgsu.jianshu.Bmob.Book_bmob
class BookshelfAdapter(val context: Context, val bookshelf: ArrayList<Book_Shelf>) : RecyclerView.Adapter<BookshelfAdapter.ViewHolder>(),
View.OnLongClickListener, View.OnClickListener {
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val book_img: ImageView = view.findViewById(R.id.bookshelf_bkimg)
val book_name: TextView = view.findViewById(R.id.bookshelf_bkname)
// val mCheckBox: CheckBox = view.findViewById(R.id.bookshelf_checkBox)
}
private var onItemClickListener: RecyclerViewOnItemClickListener? = null
private var isshowBox: Boolean = false
private val map: MutableMap<Int, Boolean?> = HashMap()
private var flag: Boolean = false
fun initMap() {
for (i in bookshelf.indices) {
map[i] = false
}
Log.d("initmap", "no")
}
fun setSelectItem(position: Int) {
//对当前状态取反
if (map[position]!!) {
map[position] = false
} else {
map[position] = true
}
notifyItemChanged(position)
}
fun setShowBox() {
//取反
isshowBox = !isshowBox
}
fun getMap(): Map<Int, Boolean?> {
return map
}
// fun setOnItemLongClickListener(onItemLongClickListener: RecyclerViewOnItemLongClickListener) {
// this.onItemLongClickListener = onItemLongClickListener;
// }
// interface RecyclerViewOnItemClickListener {
// fun onItemClickListener(view: View?, position: Int)
// }
// interface RecyclerViewOnItemLongClickListener {
// fun onItemLongClickListener(view: View, position: Int): Boolean;
// }
interface RecyclerViewOnItemClickListener {
//点击事件
fun onItemClickListener(view: View?, position: Int)
//长按事件
fun onItemLongClickListener(view: View?, position: Int): Boolean
}
fun setRecyclerViewOnItemClickListener(onItemClickListener: RecyclerViewOnItemClickListener?) {
this.onItemClickListener = onItemClickListener
}
override fun onClick(v: View) {
if (onItemClickListener != null) {
//注意这里使用getTag方法获取数据
onItemClickListener!!.onItemClickListener(v, v.tag as Int)
}
}
override fun onLongClick(v: View): Boolean {
initMap()
return onItemClickListener != null && onItemClickListener!!.onItemLongClickListener(
v,
(v.tag as Int)
)
val bookshelfBkimg: ImageView = view.findViewById(R.id.bookshelf_bkimg)
val bookshelfSelectIcon: ImageView = view.findViewById(R.id.bookshelf_select_icon)
val bookshelfBkname: TextView = view.findViewById(R.id.bookshelf_bkname)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.bookshelf_item, parent, false)
view.setOnLongClickListener(this)
view.setOnClickListener(this)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// Log.d("check", isshowBox.toString())
// if (isshowBox) {
// holder.mCheckBox.visibility = VISIBLE
// } else {
// holder.mCheckBox.visibility = View.INVISIBLE
// }
// holder.mCheckBox.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked -> //用map集合保存
// map[position] = isChecked
// })
// 设置CheckBox的状态
if (map[position] == null) {
map[position] = false
}
// holder.mCheckBox.isChecked = map[position]!!
// holder.itemView.setOnClickListener{
// if(!flag){
// holder.mCheckBox.visibility=View.VISIBLE
// flag=true
// }
// else{
// holder.mCheckBox.visibility=View.INVISIBLE
// flag=false
// }
// }
val book = bookshelf[position]
// if (holder is ViewHolder) {
// val viewHolder: ViewHolder = holder
// if (selected == position) {
// viewHolder.mCheckBox.setChecked(true)
// viewHolder.itemView.setSelected(true)
// } else {
// viewHolder.mCheckBox.setChecked(false)
// viewHolder.itemView.setSelected(false)
// }
// if (onItemClickListener != null) {
// viewHolder.itemView.setOnClickListener(View.OnClickListener {
// onItemClickListener!!.onItemClickListener(
// viewHolder.itemView,
// viewHolder.adapterPosition
// )
// })
// }
// }
var flag: Boolean = false
holder.book_img.setTag("1")
if (book.bkname.equals("添加")) {
holder.book_img.scaleType = ImageView.ScaleType.CENTER_INSIDE
holder.book_img.setImageResource(R.drawable.add)
flag = true
}
holder.book_name.text = book.bkname
val query = BmobQuery<Book_bmob>()
query.addWhereEqualTo("name", book.bkname)
query.findObjects(object : FindListener<Book_bmob>() {
override fun done(p0: MutableList<Book_bmob>?, p1: BmobException?) {
if (p1 == null) {
if (p0 != null && p0.size > 0) {
for (p in p0) {
object : Thread() {
override fun run() {
try {
if (flag) {
holder.bookshelfBkname.text = book.bkname
if (book.bkname.equals("添加")) {
holder.bookshelfBkimg.scaleType = ImageView.ScaleType.CENTER_INSIDE
holder.bookshelfBkimg.setImageResource(R.drawable.add)
holder.bookshelfSelectIcon.visibility = View.GONE
} else {
holder.book_img.setTag("0")
val url = URL(p!!.picture.url)
val connection: HttpURLConnection =
url.openConnection() as HttpURLConnection
connection.setRequestMethod("GET")
connection.setConnectTimeout(5000)
val `in`: InputStream = connection.getInputStream()
val bitmap: Bitmap = BitmapFactory.decodeStream(`in`)
holder.book_img.setImageBitmap(bitmap)
holder.bookshelfSelectIcon.visibility = if (isSelectMode) View.VISIBLE else View.GONE
holder.bookshelfSelectIcon.setImageResource(if (selectedItems.contains(position)) R.drawable.selected else R.drawable.select)
Glide.with(holder.itemView.context)
.load(book.picurl)
.placeholder(R.drawable.pre_load)
.error(R.drawable.fail_load)
.into(holder.bookshelfBkimg)
}
} catch (e: Exception) {
e.printStackTrace()
holder.bookshelfSelectIcon.setOnClickListener { //选择or取消
toggleSelection(position)
}
}
}.start()
}
}
}
}
})
holder.book_img.setOnClickListener {
val res = holder.book_img.getTag()
if (res == "0") {
holder.bookshelfBkimg.setOnClickListener {
if (book.bkname.equals("添加")) {
val intent = Intent(context, MainActivity::class.java)
context.startActivity(intent)
} else {
if (isSelectMode) {
toggleSelection(position)
} else {
val intent = Intent(holder.itemView.context, BookInformationActivity::class.java)
intent.putExtra("Book_name", book.bkname)
ContextCompat.startActivity(holder.itemView.context, intent, null)
} else {
val intent = Intent(context, MainActivity::class.java)
context.startActivity(intent)
}
}
}
}
override fun getItemCount() = bookshelf.size
}
fun toggleSelectMode() {
isSelectMode = !isSelectMode
if (!isSelectMode) {
selectedItems.clear()
onSelectionChanged?.invoke(selectedItems.size)
}
notifyDataSetChanged()
}
private fun toggleSelection(position: Int) {
if (selectedItems.contains(position)) {
selectedItems.remove(position)
} else {
selectedItems.add(position)
}
notifyItemChanged(position)
onSelectionChanged?.invoke(selectedItems.size)
}
}

View File

@ -16,6 +16,7 @@ import cn.bmob.v3.BmobQuery
import cn.bmob.v3.exception.BmobException
import cn.bmob.v3.listener.FindListener
import cn.bmob.v3.listener.SaveListener
import com.bumptech.glide.Glide
import com.zjgsu.jianshu.Activity.sendPerceptionActivity
import com.zjgsu.jianshu.Bmob.BookShelf
import com.zjgsu.jianshu.Bmob.Book_bmob
@ -25,73 +26,25 @@ import java.io.InputStream
import java.net.HttpURLConnection
import java.net.URL
lateinit var selectedBook:String
class send_perceptionAdapter(val bookList:List<BookAuthor>):RecyclerView.Adapter<send_perceptionAdapter.ViewHolder>() {
class send_perceptionAdapter(val bookList:List<Book_Shelf>):RecyclerView.Adapter<send_perceptionAdapter.ViewHolder>() {
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val book_Image: ImageView = view.findViewById(R.id.book_Image2)
val book_Name: TextView = view.findViewById(R.id.book_name)
val book_Image: ImageView = view.findViewById(R.id.send_bookimg)
val book_Name: TextView = view.findViewById(R.id.send_bookname)
val background: LinearLayout = view.findViewById(R.id.bookpic_background)
}
private val map: MutableMap<Int, Boolean?> = HashMap()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.bookpic_item, parent, false)
// val viewHolder=ViewHolder(view)
// viewHolder.book_Image.setOnClickListener {
// val position=viewHolder.adapterPosition
// val book=bookList[position]
// var cnt=0
// for (i in map){
// if(i.value==true)
// cnt++
// }
// if(cnt==0) {
// if (map[position] == false) {
// map[position] = true
// viewHolder.background.setBackgroundColor(Color.CYAN)
// selectedBook = book.name
// } else {
// map[position] = false
// viewHolder.background.setBackgroundColor(Color.WHITE)
// selectedBook = ""
// }
// }
// else{
// Toast.makeText(parent.context,"只能选择一本书!",Toast.LENGTH_SHORT).show()
// }
// }
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val book = bookList[position]
val query = BmobQuery<Book_bmob>()
query.addWhereEqualTo("name",book.name)
query.findObjects(object : FindListener<Book_bmob>() {
override fun done(p0: MutableList<Book_bmob>?, p1: BmobException?) {
if (p1 == null) {
if (p0 != null && p0.size > 0) {
for (p in p0) {
holder.book_Name.text=p.name
object : Thread() {
override fun run() {
try {
val url = URL(p!!.picture.url)
val connection: HttpURLConnection =
url.openConnection() as HttpURLConnection
connection.setRequestMethod("GET")
connection.setConnectTimeout(5000)
val `in`: InputStream = connection.getInputStream()
val bitmap: Bitmap =
BitmapFactory.decodeStream(`in`)
holder.book_Image.setImageBitmap(bitmap)
} catch (e: Exception) {
e.printStackTrace()
}
}
}.start()
}
}
}
}
})
Glide.with(holder.itemView.context)
.load(book.picurl) // 确保你的Book对象有正确的图片URL
.placeholder(R.drawable.pre_load) // 可以设置一个占位图
.error(R.drawable.fail_load) // 设置加载失败的图
.into(holder.book_Image)
holder.book_Name.text=book.bkname
holder.book_Image.setOnClickListener {
var cnt=0
for (i in map){
@ -101,7 +54,7 @@ class send_perceptionAdapter(val bookList:List<BookAuthor>):RecyclerView.Adapter
if(cnt==0) {
map[position]=true
holder.background.setBackgroundColor(Color.CYAN)
selectedBook = book.name
selectedBook = book.bkname
}
else if(cnt==1){
if (map[position] == true){
@ -113,7 +66,6 @@ class send_perceptionAdapter(val bookList:List<BookAuthor>):RecyclerView.Adapter
}
}
else{
}
}
}

View File

@ -0,0 +1,10 @@
package com.zjgsu.jianshu.Bmob
import cn.bmob.v3.BmobObject
import cn.bmob.v3.datatype.BmobFile
class Author_bmob:BmobObject() {
val picture:BmobFile=BmobFile()
val author_introduce:String=""
val author_name:String=""
}

View File

@ -5,10 +5,14 @@ import cn.bmob.v3.BmobObject
class BookShelf:BmobObject(){
var b_name:String = ""
var userid:String=""
var picurl:String=""
fun setb_name(bookname: String){
this.b_name=bookname
}
fun setuserid(uid: String){
this.userid=uid
}
fun setpicurl(picurl:String){
this.picurl=picurl
}
}

View File

@ -15,6 +15,7 @@ class Book_info_bmob:BmobObject(){
var tuijian:Int=0
var buxing:Int=0
var countOfReaders:Int=0
var authorid:String=""
fun settuijian(tuijian1: Int){
this.tuijian=tuijian1
}

View File

@ -1,3 +1,3 @@
package com.zjgsu.jianshu
class BookAuthor(val name:String,val author_name:String)
class AuthorWork(val book_name:String,val author_name:String,val bookurl:String)

View File

@ -2,4 +2,4 @@ package com.zjgsu.jianshu
import cn.bmob.v3.datatype.BmobFile
class Book_Shelf(val bkname:String)
class Book_Shelf(val bkname:String,val picurl:String)

Binary file not shown.

After

Width:  |  Height:  |  Size: 977 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

View File

@ -1,18 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".author_introductionActivity">
tools:context=".Author_introductionActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/author_back"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginStart="10dp"
android:padding="8dp"
android:src="@drawable/return1" />
<TextView
android:id="@+id/page_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="作者简介"
android:textSize="18sp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
@ -20,80 +42,72 @@
android:layout_margin="10dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="250dp"
android:layout_height="180dp"
android:layout_weight="1"
android:orientation="horizontal">
<ImageView
android:id="@+id/author_img"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:srcCompat="@tools:sample/avatars" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="30dp"
android:layout_weight="1"
android:orientation="horizontal">
android:orientation="vertical">
<TextView
android:id="@+id/book_authorname1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginTop="50dp"
android:gravity="center"
android:gravity="start"
android:text="作者"
android:textSize="20dp"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal">
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:textSize="15dp"
android:textStyle="italic"
android:text="简介">
</TextView>
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="简介"
android:textSize="15sp"
android:textStyle="italic" />
<TextView
android:id="@+id/author_intro"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="详情1111111111111111"
android:textSize="15sp"
android:textStyle="italic" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_alignParentTop="true">
<include layout="@layout/expandable" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:textSize="15dp"
android:textStyle="italic"
android:text="作品">
</TextView>
</LinearLayout>
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_marginTop="10dp"
android:text="作品"
android:textSize="15sp"
android:textStyle="italic" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView1"
android:id="@+id/authorwork_recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
</ScrollView>

View File

@ -5,38 +5,149 @@
android:id="@+id/drawerLayout_bookshelf"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/default_title"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="书架"
android:layout_marginStart="10dp"
android:textSize="16sp"
android:textStyle="bold" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="30dp"
app:srcCompat="@drawable/select" />
<TextView
android:id="@+id/bookshelf_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:text="选择"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/selected_title"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:visibility="gone">
<TextView
android:id="@+id/select_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="全选"
android:textSize="16sp"
android:textStyle="bold" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:id="@+id/select_books"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选择书籍"
android:textSize="16sp"
android:textStyle="bold" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:id="@+id/bookshelf_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:text="取消"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#CCCCCC"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="10dp" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- SwipeRefreshLayout 包裹的 RecyclerView -->
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefresh2"
android:id="@+id/bookshelf_swipeRefresh"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/layout_bottom_navigation"
app:layout_constraintBottom_toTopOf="@+id/bookshelf_layout_bottom_navigation"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="@drawable/wenli">
app:layout_constraintEnd_toEndOf="parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView2"
android:id="@+id/bookshelf_recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<!-- 底部导航栏 -->
<include
android:id="@+id/layout_bottom_navigation"
android:id="@+id/bookshelf_layout_bottom_navigation"
layout="@layout/layout_bottom_navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<LinearLayout
android:id="@+id/selected_bottom_navigation"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:visibility="gone"
android:gravity="center"
android:background="#EEEEEE">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
app:srcCompat="@drawable/remove" />
<TextView
android:id="@+id/removeFromBookshelf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="移除书架"
android:layout_marginStart="8dp"
android:onClick="onRemoveFromBookshelfClicked" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.drawerlayout.widget.DrawerLayout>

View File

@ -50,8 +50,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:text="简书榜单"
android:layout_marginTop="65dp"
android:text="一周好书榜"
android:textSize="18sp"
android:textStyle="bold" />

View File

@ -7,13 +7,11 @@
android:orientation="vertical">
<Button
android:id="@+id/delete"
android:id="@+id/send_return"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_margin="5dp"
android:background="@drawable/delete"
android:text="Back"
android:textColor="#fff" />
android:background="@drawable/return1" />
<TextView
android:id="@+id/textView7"
@ -43,7 +41,7 @@
android:orientation="horizontal">
<ImageView
android:id="@+id/touxiang"
android:id="@+id/send_avatar"
android:layout_width="30dp"
android:layout_height="37dp"
tools:srcCompat="@tools:sample/avatars" />

View File

@ -8,10 +8,11 @@
android:layout_margin="2dp">
<ImageView
android:id="@+id/book_Image1"
android:layout_width="135dp"
android:layout_height="180dp"
android:id="@+id/authorwork_img"
android:layout_width="120dp"
android:layout_height="160dp"
android:layout_gravity="center_vertical"
android:scaleType="centerCrop"
android:layout_marginLeft="10dp" />
<LinearLayout
@ -30,7 +31,5 @@
android:textSize="13dp"
app:srcCompat="@drawable/addtobookshelf"
tools:ignore="TouchTargetSizeCheck" />
</LinearLayout>
</LinearLayout>

View File

@ -9,7 +9,7 @@
android:layout_margin="2dp">
<ImageView
android:id="@+id/book_Image2"
android:id="@+id/send_bookimg"
android:layout_width="120dp"
android:layout_height="160dp"
android:scaleType="centerCrop"
@ -23,7 +23,7 @@
android:orientation="vertical">
<TextView
android:id="@+id/book_name"
android:id="@+id/send_bookname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"

View File

@ -6,29 +6,32 @@
android:layout_height="wrap_content"
android:layout_margin="10dp"
app:cardCornerRadius="4dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- <CheckBox-->
<!-- android:id="@+id/bookshelf_checkBox"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="30dp"-->
<!-- android:focusableInTouchMode="false"-->
<!-- android:visibility="invisible"-->
<!-- android:gravity="center" />-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="180dp">
<ImageView
android:id="@+id/bookshelf_bkimg"
android:layout_width="match_parent"
android:layout_height="180dp"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"></LinearLayout>
<ImageView
android:id="@+id/bookshelf_select_icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="bottom|end"
android:layout_margin="8dp"
android:src="@drawable/select"
android:visibility="gone" />
</FrameLayout>
<TextView
android:id="@+id/bookshelf_bkname"
@ -39,4 +42,5 @@
android:textSize="16sp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="是否移除书架?"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/dialog_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="您确定要将该书移出书架吗?"
android:textSize="16sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="end"
android:orientation="horizontal">
<Button
android:id="@+id/dialog_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消" />
<Button
android:id="@+id/dialog_remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="移除" />
</LinearLayout>
</LinearLayout>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView100"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>