java - 无法在 Recycler View 中从一项 Activity 转到另一项 Activity

标签 java android

大家好我正在尝试使用回收器 View 的适配器类中的 Intent 从一个 Activity 转移到另一个 Activity ,但是我在这样做时收到 son=me 错误,以下是错误: 1.PakistaniActivity 不是封闭类。 2.无法解析方法StatrActivity();

这是我的代码:

巴基斯坦 Activity .Java

   package com.recycler.hp.navigationbar;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;

     public class PakistaniActivity extends AppCompatActivity {

    @Override
      protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pakistani);
    RecyclerView rl=findViewById(R.id.list);
    rl.setLayoutManager(new LinearLayoutManager(this));
    String[] languges={"Badnamiyan", "song2","song3","song4","Song5","song6","song7","song8","song9"};
    rl.setAdapter(new Adaptor(languges));
    }
     }

适配器.java

     package com.recycler.hp.navigationbar;

    import android.content.Intent;
     import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
     import android.view.ViewGroup; 
      import android.widget.Button;
       import android.widget.ImageButton;
     import android.widget.ImageView;
     import android.widget.TextView;
     import android.widget.Toast;

      import java.io.IOException;
      import java.net.URL;



       public class Adaptor extends RecyclerView.Adapter<Adaptor.viewholder> {
private String[] data;

public Adaptor(String[] data) {
    this.data = data;
}


@Override
public viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View view = inflater.inflate(R.layout.list_item1, parent, false);
    return new viewholder(view);
}

@Override
public void onBindViewHolder(viewholder holder, final int position) {
    String title = data[position];
    holder.t.setText(title);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             long x;
             x=getItemId(position);
            if(x==0)
            {
                 Intent intent=new Intent(PakistaniActivity.this,Revival_Activity.class);
                 startActivity(intent);
            }
        }
    });

}

@Override
public int getItemCount() {
    return data.length;
}

public class viewholder extends RecyclerView.ViewHolder {
    ImageView i;
    TextView t;

    public viewholder(View itemView) {
        super(itemView);
        i = itemView.findViewById(R.id.img1);
        t = itemView.findViewById(R.id.main1);
    }
}

   }

最佳答案

尽量不要在适配器内部启动 Activity 。您可以使用此适配器:

public abstract class ClickableAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {

    private ClickItemListener clickItemListener;

    public void setClickItemListener(ClickItemListener clickItemListener) {
        this.clickItemListener = clickItemListener;
    }


    @Override
    public void onBindViewHolder(@NonNull final VH holder, int position) {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (clickItemListener != null)
                    clickItemListener.onClickItem(holder.itemView, holder.getAdapterPosition());
                else
                    throw new IllegalStateException("Click listener not set");
            }
        });
    }

    public interface ClickItemListener {
        void onClickItem(View v, int position);
    }
}

然后让你的适配器扩展我的:

public class Adaptor extends ClickableAdapter<Adaptor.viewholder> {
private String[] data;

public Adaptor(String[] data) {
    this.data = data;
}


@Override
public viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View view = inflater.inflate(R.layout.list_item1, parent, false);
    return new viewholder(view);
}

@Override
public void onBindViewHolder(viewholder holder, final int position) {
    super.onBindViewHolder(holder,position);
    String title = data[position];
    holder.t.setText(title);

}

@Override
public int getItemCount() {
    return data.length;
}

public class viewholder extends RecyclerView.ViewHolder {
    ImageView i;
    TextView t;

    public viewholder(View itemView) {
        super(itemView);
        i = itemView.findViewById(R.id.img1);
        t = itemView.findViewById(R.id.main1);
    }
}

   }

最后,在您的 Activity 中,您可以设置适配器的行为:

Adaptor adapter = new Adaptor(languges)
rl.setAdapter(adapter);

adapter.setClickItemListener(new ClickableAdapter.ClickItemListener() {
            @Override
            public void onClickItem(View v, int position) {
                if(position==0)
            {
                 Intent intent=new Intent(PakistaniActivity.this,Revival_Activity.class);
                 startActivity(intent);
            }

            }
        });

关于java - 无法在 Recycler View 中从一项 Activity 转到另一项 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49821027/

相关文章:

android - 我可以使用 Intent.ACTION_SEND 绕过 Android 选择器菜单吗?

java - 在Android Studio Project中添加外部jar文件

java - Google map .getMap() 已弃用

javascript - Android : Detect history. WebView 中的 back()

java - 从其他类引用整数

android - 在 Jetpack Compose 中更改光标位置并强制 TextField 的 SingleLine

java - 我正在尝试制作一个按钮来计算文本字段中的字符数

java - 如何解析一个字符串的集合?

Java - 识别更改类私有(private)成员的代码?

android - Android 浏览器中的深层链接未打开应用程序