1.Android Support 问题--类型:配置信息
我使用了Android支持库,
会出现类似于
Duplicate class android.support.v4.app.INotificationSideChannel found in modules core-1.3.1-runtime (androidx.core:core:1.3.1) and support-compat-27.1.1-runtime (com.android.support:support-compat:27.1.1)等等等的错误
gradle.properties(Project Properties) < Gradle Scripts <Android studio 的Android文件导航模式
android.useAndroidX=true android.enableJetifier=true
2.一个本应显示一系列列表的一个RecyclerView只显示一个子元素(或若干个但不符合预期)(而不是多个元素的列表)RecyclerView.Adapter的问题--问题类型,类设计模式过于抽象
下面的代码已经经过修正。
实际上这个列表元素的数量正是由getItemCount()返回的,当初我也不知道这个函数有什么特殊的用处。如果不清楚这一点,就可能导致列表展示错误。在明面上并没有实际的联系,但事实上关系确实如此。
package com.luckyxmoible.mymemo; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.nfc.Tag; import android.os.Parcelable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; import static androidx.constraintlayout.motion.widget.MotionScene.TAG; public class DiaryRecyclerViewAdapter extends RecyclerView.Adapter<DiaryRecyclerViewAdapter.ViewHolder> { private final List<Diary> mDiaries; private Context context; private final RecyclerItemListener recyclerItemListener = new RecyclerItemListener() { @Override public void onItemClick(Diary diary,View v) { RecyclerItemListener.diary = diary; Intent intent = new Intent(v.getContext(),ShowDiaryDetails.class); //intent.putExtra("Diary symbol", (Parcelable) diary); v.getContext().startActivity(intent); } }; public DiaryRecyclerViewAdapter(List<Diary> Diaries ) { mDiaries = Diaries; } @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_diary,parent,false); return new ViewHolder(view); } @SuppressLint("SetTextI18n") @Override public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { Log.d(TAG, "onBindViewHolder: "+position); holder.img_v1.setImageResource(0); Diary diary = mDiaries.get(position); if(diary.isLocked){ holder.textContent_v.setText("locked"); holder.local_v.setText("locked"); }else{ if(diary.uris!=null){ if(diary.uris.size()>=1){ if(diary.uris.get(0)!=null){ holder.img_v1.setImageURI(diary.uris.get(0)); Log.d(TAG, "onBindViewHolder: "+diary.uris.get(0).toString()); } } } holder.textContent_v.setText(diary.getContentSummary()); holder.local_v.setText(diary.getLocation()); } holder.title_v.setText(diary.title); holder.time_v.setText(diary.getTimeInfo()); holder.itemView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Log.d(TAG, "onClick: "); //holder.binding.setDiary(new Diary("hehe","lala")); recyclerItemListener.onItemClick(diary,v); } }); } @Override public int getItemCount() { return mDiaries.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public final View parentView; public final TextView title_v; public final TextView local_v; public final TextView time_v; public final TextView textContent_v; public final ImageView img_v1; public ViewHolder(View view) { super(view); parentView = view; title_v = (TextView)view.findViewById(R.id.title); time_v = (TextView)view.findViewById(R.id.date); local_v = (TextView)view.findViewById(R.id.location); textContent_v = (TextView)view.findViewById(R.id.text_content); img_v1 = (ImageView)view.findViewById(R.id.image_view); } } }
3.如何给使用使用了LinearLayoutManager的RecyclerView上的每一个 子元素 添加一个点击监听器并传递对象信息。
子问题:如何在接口函数中使用Intent调转Activity
代码主要部分还在上面
下面是接口(对象)的代码
package com.luckyxmoible.mymemo; import android.view.View; public class RecyclerItemListener { public static Diary diary = null; public void onItemClick(Diary diary, View v){ }; }
首先,生成了一个实例,并重写了方法。
接受diary对象和view对象。
这个view是每一次传过来的点击的一个列表中元素的View。
Intent intent = new Intent(v.getContext(),ShowDiaryDetails.class); v.getContext().startActivity(intent);
Log.d(TAG, "onItemClick: 6666666"+v.getContext().toString());
D/MotionScene: onItemClick: 6666666com.luckyxmoible.mymemo.MainActivity@bfea2dc
实际上,这个列表中元素获取的这个context也是其Actyivity这个context。
结合之前的理论,也可以使用这个fragment的view,通过view.getContext()来获取Activity的context或者通过onAttach里的context。
我们在每一个列表中的元素 设计时都添加了一个点击监听器,内部调用了这个重写的接口的函数。传递了这个元素的View和该元素对应的diary对象。