在java中从自定义适配器打开另一个活动时出现问题

在java中从自定义适配器打开另一个活动时出现问题,java,android,android-recyclerview,android-adapter,Java,Android,Android Recyclerview,Android Adapter,我需要从自定义适配器打开另一个活动,就像一个列表一样,然后当我单击该列表时,它将转到另一个活动,从数据库中获取数据并在文本视图中显示, 问题在于context.startActivity(intent)中的SearchAdapter.java 这是我的searchAdapter.java package Adapter; import android.content.Context; import android.content.DialogInterface; import android

我需要从自定义适配器打开另一个活动,就像一个列表一样,然后当我单击该列表时,它将转到另一个活动,从数据库中获取数据并在文本视图中显示, 问题在于context.startActivity(intent)中的SearchAdapter.java

这是我的searchAdapter.java


package Adapter;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
//import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.manualdiagnosiskeperawatan.R;
import com.example.manualdiagnosiskeperawatan.isiDiagnosis;

import java.util.List;

import Model.Daftar;

class SearchViewHolder extends RecyclerView.ViewHolder{

    public TextView judul, diagnosis;
    public SearchViewHolder(View itemView) {
        super(itemView);
        judul = itemView.findViewById(R.id.judul);
        diagnosis = itemView.findViewById(R.id.textViewIsi);

    }
}

public class SearchAdapter extends RecyclerView.Adapter<SearchViewHolder>
{
    private Context context;
    private List<Daftar> data;

    public SearchAdapter(Context context, List<Daftar> data) {
        this.context = context;
        this.data = data;
    }

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

    @Override
    public void onBindViewHolder(final SearchViewHolder holder, final int position) 
    {
        holder.judul.setText(data.get(position).getJudul());

        //open activity
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, data.get(position).getDiagnosis(),Toast.LENGTH_SHORT).show();

                //this code, isn't working 
                Intent intent = new Intent(context, isiDiagnosis.class);
                intent.putExtra("did",data.get(position).getDid());
                context.startActivity(intent);
            }
        });
    }

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



封装适配器;
导入android.content.Context;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入android.widget.Toast;
//导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入com.example.manualdiagnosiskeperawatan.R;
导入com.example.manualdiagnosiskeperawatan.isiDiagnosis;
导入java.util.List;
进口模型.Daftar;
类SearchViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图judul,诊断;
公共SearchViewHolder(查看项目视图){
超级(项目视图);
judul=itemView.findviewbyd(R.id.judul);
诊断=itemView.findViewById(R.id.textViewIsi);
}
}
公共类SearchAdapter扩展了RecyclerView.Adapter
{
私人语境;
私人名单数据;
公共SearchAdapter(上下文、列表数据){
this.context=上下文;
这个数据=数据;
}
@凌驾
public SearchViewHolder onCreateViewHolder(视图组父级,int-viewType){
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
视图项视图=充气机。充气(R.layout.layout\u项,父项,false);
返回新的SearchViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(最终SearchViewHolder,最终int位置)
{
holder.judul.setText(data.get(position.getJudul());
//公开活动
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Toast.makeText(context,data.get(position).getDiagnosis(),Toast.LENGTH_SHORT).show();
//此代码不起作用
意向意向=新意向(上下文,isiDiagnosis.class);
intent.putExtra(“did”,data.get(position.getDid());
背景。开始触觉(意图);
}
});
}
@凌驾
public int getItemCount(){
返回data.size();
}
}
这是我的isiDiagnosis.java,当我从SearchAdapter.java中单击列表时,它将被打开


package com.example.manualdiagnosiskeperawatan;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;
import com.mancj.materialsearchbar.MaterialSearchBar;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.List;
import Adapter.SearchAdapter;
import Database.Database;
import Model.Daftar;

public class isiDiagnosis extends AppCompatActivity {

    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;
    SearchAdapter adapter;
    Database database;
    List<Daftar> daftars = new ArrayList<>();

    private TextView judul, diagnosis;
    private String DID = "judul";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_isi_diagnosis);
        DID = getIntent().getStringExtra("judul");
        database = new Database(this);
        diagnosis = (TextView) findViewById(R.id.textViewIsi);
        //init DB
        loadData(DID);


    }

    private void loadData(String did) {

//i don't really know how to code, just see from the youtube, so i made this myself

//        database.getDiagnosis();
//        String diagnosis = daftars.get(database.getDiagnosis());
//            database.getDiagnosis(diagnosis.setText());
    }
}



包com.example.manualdiagnosiskeperawatan;
导入androidx.appcompat.app.appcompat活动;
导入androidx.recyclerview.widget.recyclerview;
导入android.content.Intent;
导入android.database.sqlite.SQLiteDatabase;
导入android.os.Bundle;
导入android.provider.contacts合同;
导入android.widget.TextView;
导入com.mancj.materialsearch.materialsearch;
导入org.w3c.dom.Text;
导入java.util.ArrayList;
导入java.util.List;
导入适配器.SearchAdapter;
导入数据库;
进口模型.Daftar;
公共类ISI诊断扩展了应用程序活动{
回收视图回收视图;
RecyclerView.LayoutManager LayoutManager;
搜索适配器;
数据库;
List daftars=new ArrayList();
私人文本视图judul,诊断;
私有字符串DID=“judul”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u isi\u diagnosis);
DID=getIntent().getStringExtra(“judul”);
数据库=新数据库(此数据库);
诊断=(TextView)findViewById(R.id.textViewIsi);
//初始化数据库
负荷数据(DID);
}
私有void加载数据(字符串did){
//我真的不知道如何编码,只是从youtube上看到,所以我自己做了这个
//getDiagnosis()数据库;
//字符串诊断=daftars.get(database.getDiagnosis());
//database.getDiagnosis(diagnosis.setText());
}
}
这是我的searchDiagnosis.java


package com.example.manualdiagnosiskeperawatan;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.widget.ListViewCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.Adapter;
import android.widget.ListView;

import com.mancj.materialsearchbar.MaterialSearchBar;

import java.util.ArrayList;
import java.util.List;

import Adapter.SearchAdapter;
import Database.Database;

public class searchDiagnosis extends AppCompatActivity {

    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;
    SearchAdapter adapter;

    Database database;

    MaterialSearchBar materialSearchBar;
    List<String> suggestList = new ArrayList<>();

    @Override
    protected void onStart() {
        super.onStart();
        adapter = new SearchAdapter(getBaseContext(),database.getDaftar());
        recyclerView.setAdapter(adapter);

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_diagnosis);

        //init view
        recyclerView = (RecyclerView) findViewById(R.id.recycler_search);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);

        materialSearchBar =(MaterialSearchBar) findViewById(R.id.search_bar);

        //init DB
        database = new Database(this);

        //Setup search bar
        materialSearchBar.setHint("Search");
        materialSearchBar.setCardViewElevation(10);
        loadSuggestList();
        materialSearchBar.addTextChangeListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                List<String> suggest = new ArrayList<>();
                for(String search:suggestList){
                    if(search.toLowerCase().contains(materialSearchBar.getText().toLowerCase()))
                            suggest.add(search);
                }
                materialSearchBar.setLastSuggestions(suggest);

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
        materialSearchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() {
            @Override
            public void onSearchStateChanged(boolean enabled) {
                if(!enabled) {
//                    recyclerView.setAdapter(adapter);
                        //if close Search, just restore default
                        adapter = new SearchAdapter(getBaseContext(),database.getDaftar());
                        recyclerView.setAdapter(adapter);
                }
            }

            @Override
            public void onSearchConfirmed(CharSequence text) {
                startSearch(text.toString());

            }

            @Override
            public void onButtonClicked(int buttonCode) {

            }
        });


        //Init adapter default set all result
        adapter = new SearchAdapter(this,database.getDaftar());
    }

    private void startSearch(String text) {

        adapter = new SearchAdapter(this,database.getDataByJudul(text));
        recyclerView.setAdapter(adapter);

    }

    private void loadSuggestList() {
        suggestList = database.getJudul();
        materialSearchBar.setLastSuggestions(suggestList);
    }
}



包com.example.manualdiagnosiskeperawatan;
导入androidx.appcompat.app.appcompat活动;
导入androidx.core.widget.ListViewCompat;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入android.os.Bundle;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.widget.Adapter;
导入android.widget.ListView;
导入com.mancj.materialsearch.materialsearch;
导入java.util.ArrayList;
导入java.util.List;
导入适配器.SearchAdapter;
导入数据库;
公共类searchDiagnosis扩展了AppCompative活动{
回收视图回收视图;
RecyclerView.LayoutManager LayoutManager;
搜索适配器;
数据库;
材料搜索栏材料搜索栏;
List suggestList=新建ArrayList();
@凌驾
受保护的void onStart(){
super.onStart();
adapter=newsearchadapter(getBaseContext(),database.getDaftar());
recyclerView.setAdapter(适配器);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u search\u Diagnostics);
//初始视图
recyclerView=(recyclerView)findViewById(R.id.recycler\u搜索);
layoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
materialSearchBar=(materialSearchBar)findViewById(R.id.search\u bar);
//初始化数据库
数据库=新数据库(此数据库);
//设置搜索栏
materialSearchBar.setHint(“搜索”);
材料搜索栏。设置卡片视图立面图(10);
loadSuggestList();
materialSearchBar.addTextChangeListener(新的TextWatcher(){
@凌驾
P
package Model;

public class Daftar {

    public int id;
    public String did, judul, diagnosis;

    public Daftar(int id,String did, String judul, String diagnosis) {
        this.id = id;
        this.did = did;
        this.judul = judul;
        this.diagnosis = diagnosis;
    }

    public Daftar() {
    }

    public int getId() {
        return id;
    }

    public String getDid() {
        return did;
    }

    public void setDid(String did) {
        this.did = did;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getJudul() {
        return judul;
    }

    public void setJudul(String judul) {
        this.judul = judul;
    }

    public String getDiagnosis() {
        return diagnosis;
    }

    public void setDiagnosis(String diagnosis) {
        this.diagnosis = diagnosis;
    }
}


   ............
   //get the did like this
   DID = getIntent().getStringExtra("did");

   .......
   loadData(DID);

  //loading the data is up to you according to the database
  private void loadData(String did) {.........}