проблема в открытии другого действия из пользовательского адаптера в java - PullRequest
1 голос
/ 25 апреля 2020

enter image description here

Мне нужно открыть другое действие из пользовательского адаптера, например, список, а затем, когда я нажму на него, оно перейдет к другому действию и получит данные из базы данных и показать его в текстовом представлении, проблема в SearchAdapter. java в context.startActivity (намерение);

вот мой 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();
    }
}


и вот мой 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());
    }
}


вот мой 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);
    }
}


Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Слушай, я не знаю, что это за база данных, но я знаю, что ты неправильно получаешь намерение:

В твоем isiDiagnosis:

   ............
   //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) {.........}
0 голосов
/ 25 апреля 2020

вот мой Daftar.class

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;
    }
}


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...