当前位置: 首页 > 知识库问答 >
问题:

无法解析“myAdapter”中的方法“getContext”[duplicate]

从建明
2023-03-14

我发现上下文有误。这表明getcontext无法在我的适配器类中解析。我正在创建一个类似udacity课程中的地震报告应用程序。我添加了回收视图和卡片视图。因此,我创建了一个适配器类。当我开始给我的大小文本视图添加颜色时,我创建了一种获取大小颜色的方法,在这种方法中,我必须从颜色中去除颜色。xml文件,但它需要上下文,并表示上下文无法解析。我正在提供我的应用程序的代码。。。请帮帮我我是android开发新手

我的适配器类代码:-

包裹通讯。实例地震报告;

import android.content.Context;
import android.graphics.drawable.GradientDrawable;
import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

public class myAdapter extends RecyclerView.Adapter<myAdapter.myViewHolder>{
    ArrayList<DataModel> dataModels;
    private static final String LOCATION_SEPARATOR = " of ";
    String primaryLocation,secondaryLocation;
    public myAdapter(ArrayList<DataModel> dataModels) {
    this.dataModels = dataModels;

}


    @NonNull
    @Override
    public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_row,parent,false);
        return new myViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull myViewHolder holder, int position) {

//        holder.mag.setText(dataModels.get(position).getMag());
        holder.location.setText(dataModels.get(position).getLocation());
        Date dateObject = new Date(dataModels.get(position).getTimeInMilliseconds());
        String formattedDate = formatDate(dateObject);
        holder.date.setText(formattedDate);
        String formattedTime = formatTime(dateObject);
        holder.time.setText(formattedTime);

        String originalLocation = dataModels.get(position).getLocation();
        if(originalLocation.contains(LOCATION_SEPARATOR)){
            String[] parts = originalLocation.split(LOCATION_SEPARATOR);
            primaryLocation = parts[0];
            secondaryLocation = parts[1];
        }
//        else{
//            primaryLocation = context.getString(R.string.near_the);
//            secondaryLocation = originalLocation;
//        }
        holder.location.setText(primaryLocation);
        holder.location2.setText(secondaryLocation);


        String formattedMagnitude = formatMagnitude(dataModels.get(position).getMag());
        holder.mag.setText(formattedMagnitude);
        GradientDrawable magnitudeCircle = (GradientDrawable) holder.mag.getBackground();

        // Get the appropriate background color based on the current earthquake magnitude
        int magnitudeColor = getMagnitudeColor(dataModels.get(position).getMag());

        // Set the color on the magnitude circle
        magnitudeCircle.setColor(magnitudeColor);



    }

    @Override
    public int getItemCount() {
        return dataModels.size();
    }


    public class myViewHolder extends RecyclerView.ViewHolder {
        TextView mag,location,location2,date,time;


        public myViewHolder(@NonNull View itemView) {
            super(itemView);
            mag = itemView.findViewById(R.id.mag_textview);
            location = itemView.findViewById(R.id.location_textview);
            location2 = itemView.findViewById(R.id.location2_textview);
            date = itemView.findViewById(R.id.date_textview);
            time = itemView.findViewById(R.id.time_textview);


        }
    }
    private String formatDate(Date dateObject) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("LLL dd, yyyy");
        return dateFormat.format(dateObject);
    }

    /**
     * Return the formatted date string (i.e. "4:30 PM") from a Date object.
     */
    private String formatTime(Date dateObject) {
        SimpleDateFormat timeFormat = new SimpleDateFormat("h:mm a");
        return timeFormat.format(dateObject);
    }

    private String formatMagnitude(double magnitude) {
        DecimalFormat magnitudeFormat = new DecimalFormat("0.0");
        return magnitudeFormat.format(magnitude);
    }
    private int getMagnitudeColor(double magnitude) {
        int magnitudeColorResourceId;
        int magnitudeFloor = (int) Math.floor(magnitude);
        switch (magnitudeFloor) {
            case 0:
            case 1:
                magnitudeColorResourceId = R.color.magnitude1;
                break;
            case 2:
                magnitudeColorResourceId = R.color.magnitude2;
                break;
            case 3:
                magnitudeColorResourceId = R.color.magnitude3;
                break;
            case 4:
                magnitudeColorResourceId = R.color.magnitude4;
                break;
            case 5:
                magnitudeColorResourceId = R.color.magnitude5;
                break;
            case 6:
                magnitudeColorResourceId = R.color.magnitude6;
                break;
            case 7:
                magnitudeColorResourceId = R.color.magnitude7;
                break;
            case 8:
                magnitudeColorResourceId = R.color.magnitude8;
                break;
            case 9:
                magnitudeColorResourceId = R.color.magnitude9;
                break;
            default:
                magnitudeColorResourceId = R.color.magnitude10plus;
                break;
        }

        return ContextCompat.getColor(getContext(),magnitudeColorResourceId);
    }





}

在最后一行"ContextCompat.getColor(getContext(), omeudeColorResourceId);"...

共有1个答案

司马自明
2023-03-14

您不能在适配器类中使用getContext(),而是可以通过适配器的参数从您将适配器设置为回收器视图的活动中传递上下文,或者您可以这样做:在myAdapter类中声明上下文

Context context;

 @NonNull
    @Override
    public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
       // you can get context from this line
        context = parent.getContext();

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_row,parent,false);
        return new myViewHolder(view);
    }
 类似资料:
  • 我有一个java项目,我正在使用Allure生成测试报告。我发现了这个问题,需要使用以下代码重命名我的测试: 我已经从下面导入了Allure生命周期: 并使用以下依赖项: 但是,这句话很有诱惑力。getLifecycle()它正在抱怨无法解析“Allure”中的方法“getLifecycle”。 如何修复错误?

  • 我是android开发的新手,正在尝试将recycler视图与setAdapter绑定,但遇到了以下错误“无法解析'ConstraintLayout'中的方法'setAdapter'” 我的主要活动。java代码是: 我的主要目标是使用ActivityMainBinding将recyclerView与setAdapter绑定 这就是我出错的地方- 它告诉我重命名引用,这到底意味着什么? 这项活动很

  • 我正在通过Android Studio中的一个应用程序工作,该应用程序使用学校意图传递数据。我已经创建了传递数据的对象,并启动了,但是我不断收到一个警告,说我的方法无法解析。有什么想法吗?提前谢了。

  • 正如文件所述: Android O允许您通过在res/字体/文件夹中添加字体文件来捆绑字体作为资源。 结果: 您可以使用getFont(int)方法检索字体,其中需要传递要检索的字体的资源标识符。此方法返回Typeface对象。这将对字体的第一个重量或样式变体(如果是字体系列)进行编码。然后可以使用字体。create(typeface,style)方法来检索特定样式。 注意:TextView已经为

  • > 在菜单项和添加导航头之间导航的代码由一个方法组成。 由于作者没有提到在哪里粘贴这段代码,我粘贴在我的文件中 在菜单项之间导航和添加导航标题之间的代码是否由我粘贴在正确的位置? 在方法selectDrawerItem(MenuItem MenuItem)中有一条注释,创建一个新片段,并根据位置指定要显示的行星,作者是否希望我在这里添加一些内容。