Android SearchView on recycleview使用改装

Android SearchView on recycleview使用改装,android,android-recyclerview,retrofit2,searchview,Android,Android Recyclerview,Retrofit2,Searchview,我正在使用改造构建一个recycleview列表,我想在操作栏上添加searchview。但是我收到了错误消息没有连接适配器;跳过布局 这是我的主要活动 public class ListActivity extends AppCompatActivity { private RecyclerView recyclerView; private ArrayList<AndroidVersion> data; private DataAdapter adapter; private S

我正在使用改造构建一个recycleview列表,我想在操作栏上添加searchview。但是我收到了错误消息
没有连接适配器;跳过布局
这是我的主要活动

public class ListActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private ArrayList<AndroidVersion> data;
private DataAdapter adapter;
private SearchView searchView;
private MenuItem searchMenuItem;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);
    recyclerView = (RecyclerView) findViewById(R.id.card_recView);
    recyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);
    adapter = new DataAdapter(data);
    recyclerView.setAdapter(adapter);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://api.learn2crack.com/android/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RequestInterface request = retrofit.create(RequestInterface.class);
    Call<JSONResponse> call = request.getJSON();
    call.enqueue(new Callback<JSONResponse>() {
        @Override
        public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
            JSONResponse jsonResponse = response.body();
            data = new ArrayList<AndroidVersion>(Arrays.asList(jsonResponse.getAndroid()));
            adapter.swapData(data);
            Toast.makeText(ListActivity.this, " Hasil", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onFailure(Call<JSONResponse> call, Throwable t) {
            Log.d("ERROR", t.getMessage());
            Toast.makeText(ListActivity.this, " ERROR ", Toast.LENGTH_SHORT).show();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.search_menu, menu);

    SearchManager searchManager = (SearchManager)
            getSystemService(Context.SEARCH_SERVICE);
    searchMenuItem = menu.findItem(R.id.search);
    searchView = (SearchView) searchMenuItem.getActionView();

    searchView.setSearchableInfo(searchManager.
            getSearchableInfo(getComponentName()));
    searchView.setSubmitButtonEnabled(true);
    searchView.setOnQueryTextListener((SearchView.OnQueryTextListener) this);
    return true;
}
公共类ListActivity扩展了AppCompatActivity{
私人回收站;
私有数组列表数据;
专用数据适配器;
私有搜索视图搜索视图;
私有菜单项搜索菜单项;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_列表);
recyclerView=(recyclerView)findViewById(R.id.card\u recView);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
适配器=新数据适配器(数据);
recyclerView.setAdapter(适配器);
改装改装=新改装.Builder()
.baseUrl(“https://api.learn2crack.com/android/")
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface请求=reformation.create(RequestInterface.class);
Call Call=request.getJSON();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
JSONResponse=response.body();
data=newarraylist(Arrays.asList(jsonResponse.getAndroid());
适配器.swapData(数据);
Toast.makeText(ListActivity.this,“Hasil”,Toast.LENGTH_SHORT.show();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.d(“ERROR”,t.getMessage());
Toast.makeText(ListActivity.this,“ERROR”,Toast.LENGTH_SHORT.show();
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。搜索菜单,菜单);
SearchManager SearchManager=(SearchManager)
getSystemService(Context.SEARCH\u服务);
searchMenuItem=menu.findItem(R.id.search);
searchView=(searchView)searchMenuItem.getActionView();
searchView.setSearchableInfo(搜索管理器)。
getSearchableInfo(getComponentName());
searchView.setSubmitButtonEnabled(true);
setOnQueryTextListener((searchView.OnQueryTextListener)this);
返回true;
}
}

上面的代码仅用于显示searchview布局。如果有人有其他方式或其他完整的教程,请。提前谢谢

编辑 这是我的适配器

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder>{

private ArrayList<AndroidVersion> android;
public DataAdapter(ArrayList<AndroidVersion> android){
    this.android = android;
}

@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {
    viewHolder.nama_dokter.setText(android.get(i).getName());
    viewHolder.alamat_1.setText(android.get(i).getVer());
    viewHolder.alamat_2.setText(android.get(i).getVer());
    viewHolder.alamat_3.setText(android.get(i).getVer());
    viewHolder.total_ps.setText(android.get(i).getApi());
    viewHolder.total_omzet.setText(android.get(i).getApi());
    viewHolder.total_pasien.setText(android.get(i).getApi());
}

@Override
public int getItemCount() {
    return android.size();
}
private ArrayList<AndroidVersion> data = new ArrayList<>();
public void swapData(ArrayList<AndroidVersion> data) {
    this.data.addAll(data);
    notifyDataSetChanged();
}


public class ViewHolder extends RecyclerView.ViewHolder {

    private  TextView nama_dokter, alamat_1, alamat_2, alamat_3, total_ps, total_omzet, total_pasien;
    public ViewHolder(View view) {
        super(view);
        nama_dokter = (TextView)view.findViewById(R.id.nama_dok);
        alamat_1 = (TextView)view.findViewById(R.id.alamat_1);
        alamat_2 = (TextView)view.findViewById(R.id.alamat_2);
        alamat_3 = (TextView)view.findViewById(R.id.alamat_3);
        total_ps = (TextView)view.findViewById(R.id.total_ps);
        total_omzet = (TextView)view.findViewById(R.id.total_omset);
        total_pasien = (TextView)view.findViewById(R.id.total_pasien);
    }
}
公共类DataAdapter扩展了RecyclerView.Adapter{
私有ArrayList android;
公共数据适配器(ArrayList android){
this.android=android;
}
@凌驾
public DataAdapter.ViewHolder onCreateViewHolder(视图组视图组,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.card_行,viewGroup,false);
返回新的ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(DataAdapter.ViewHolder-ViewHolder,int i){
viewHolder.nama_dokter.setText(android.get(i.getName());
viewHolder.alamat_1.setText(android.get(i.getVer());
viewHolder.alamat_2.setText(android.get(i.getVer());
viewHolder.alamat_3.setText(android.get(i.getVer());
viewHolder.total_ps.setText(android.get(i.getApi());
viewHolder.total_omzet.setText(android.get(i.getApi());
viewHolder.total_pasien.setText(android.get(i.getApi());
}
@凌驾
public int getItemCount(){
返回android.size();
}
private ArrayList data=new ArrayList();
公共无效交换数据(ArrayList数据){
this.data.addAll(数据);
notifyDataSetChanged();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图nama_dokter、alamat_1、alamat_2、alamat_3、total_ps、total_omzet、total_pasien;
公共视图持有者(视图){
超级(视图);
nama_dokter=(TextView)view.findviewbyd(R.id.nama_dok);
alamat_1=(TextView)view.findViewById(R.id.alamat_1);
alamat_2=(TextView)view.findViewById(R.id.alamat_2);
alamat_3=(TextView)view.findViewById(R.id.alamat_3);
total_ps=(TextView)view.findViewById(R.id.total_ps);
total_omzet=(TextView)view.findViewById(R.id.total_omset);
total_pasien=(TextView)view.findViewById(R.id.total_pasien);
}
}

}

更新

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);
    recyclerView = (RecyclerView) findViewById(R.id.card_recView);
    RecyclerView.LayoutManager layoutManager = new  LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);
    adapter = new DataAdapter(data);
    recyclerView.setAdapter(adapter);
}
内部
onResponse

adapter.swapData(数据)

内部
DataAdapter

private ArrayList<AndroidVersion> data= new ArrayList<>();
public void sawpData( ArrayList<AndroidVersion> data) {
            this.data.addAll(data);
            notifyDataSetChanged();
}
private ArrayList data=new ArrayList();
公共无效sawpData(ArrayList数据){
this.data.addAll(数据);
notifyDataSetChanged();
}
使用空构造函数初始化适配器,或传递
上下文
和内部
onResponse
设置
数据
如下
适配器。swapData(数据)
内部交换数据将设置列表并调用此
notifyDataSetChanged()

我相信你想要与上面的gif相关的东西


您可以使用
notifyDataSetChanged()
来搜索已更改的数据。

对不起,我在这方面还真是新手……您能给我详细介绍一下,比如一步一步吗?对不起,还是错了。现在错误消息是这样的
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int java.util.ArrayList.size()”
我在上面添加了我的DataAdapter.java