Android开发帮助技巧(适用于入门)(杂碎项)

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对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫叶kx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值