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