Как создать поисковую систему во вложенном Recyclerview? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть вложенный recyclerview (вертикальный recyclerview и внутри горизонтальный recyclerview). Сделайте поисковик для горизонтального recyclerview, но в момент написания приложение останавливается. Ошибка возникает, когда я вызываю адаптер, но я не знаю, как ее решить, если бы кто-то мог помочь мне, я был бы очень признателен.

MainActicyty

adapterPeliculas_Vertical adapterPeliculas_Vertical;
adapterPeliculas_horizontal AdapterPeliculas_horizontal;
RecyclerView verticalRecyclerview;
ArrayList<Peliculas_Vertical> listaPeliculas;
ArrayList<Peliculas_horizontal> listaPeliculas2, listaPeliculas3, listaPeliculas4, listaPeliculas5, 
listaPeliculas6;
BottomNavigationView bottomNavigationView;

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

verticalRecyclerview = findViewById(R.id.recyclerview_principal);
listaPeliculas = new ArrayList<>();
listaPeliculas2 = new ArrayList<>();
listaPeliculas3 = new ArrayList<>();
listaPeliculas4 = new ArrayList<>();
listaPeliculas5 = new ArrayList<>();
listaPeliculas6 = new ArrayList<>();

//cargar lista vertical
cargarLista();
//mostrar lista
mostrarLista();
//carga lista horizontal
cargarLista2();
}

public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.menu_actionbar, menu);
final MenuItem itemm = menu.findItem(R.id.menu_buscador);
final SearchView searchView = (SearchView) itemm.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        AdapterPeliculas_horizontal.getFilter().filter(newText);
        return true;
    }
});
return true;
}

public boolean onOptionsItemSelected(MenuItem item){
return true;
}

Горизонтальный переходник

Context context;
List<Peliculas_horizontal> model2;
List<Peliculas_horizontal> model3;

public adapterPeliculas_horizontal(Context context, List<Peliculas_horizontal> model2) {
this.context = context;
this.model2 = model2;
model3 = new ArrayList<>(model2);
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view2;
LayoutInflater inflater2 = LayoutInflater.from(context);
view2 = inflater2.inflate(R.layout.item_horizontal, parent, false);
return new ViewHolder(view2);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
final Peliculas_horizontal peliculas_horizontal = model2.get(position);
holder.nombre_horizontal.setText(peliculas_horizontal.getNombre());
holder.cardView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(context, detalle_pelicula.class);

        intent.putExtra("titulo", peliculas_horizontal.getTitulo());
        intent.putExtra("url", peliculas_horizontal.getUrl());
        context.startActivity(intent);
    }
});
 }

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

//buecador
@Override
public Filter getFilter() {
return filter;
}

Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
    List<Peliculas_horizontal> filterable = new ArrayList<>();
    if (charSequence == null || charSequence.length() == 0) {
        filterable.addAll(model3);
    } else {
        String flter2 = charSequence.toString().toLowerCase().trim();

        for (Peliculas_horizontal item : model3) {
            if (item.getNombre().toLowerCase().contains(flter2)) {
                filterable.add(item);
            }
        }
    }

    FilterResults results = new FilterResults();
    results.values = filterable;

    return results;
 }

@Override
protected void publishResults(CharSequence charSequence, FilterResults resultss) {
    model2.clear();
    model2.addAll((List) resultss.values);
    notifyDataSetChanged();
}
};

Вертикальный переходник

public class adapterPeliculas_Vertical extends 
RecyclerView.Adapter<adapterPeliculas_Vertical.ViewHolder> {
private Context context;
ArrayList<Peliculas_Vertical> model;

 public adapterPeliculas_Vertical(Context context, ArrayList<Peliculas_Vertical> model){
 this.context = context;
 this.model = model;
 }

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
LayoutInflater inflater = LayoutInflater.from(context);
view = inflater.inflate(R.layout.item_vertical, parent, false);
 return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
 Peliculas_Vertical peliculas_vertical = model.get(position);
 String nombre = peliculas_vertical.getNombre();
 ArrayList<Peliculas_horizontal> sigleitem = peliculas_vertical.getArrayList();

 holder.nombre.setText(nombre);
adapterPeliculas_horizontal  Horizontal = new adapterPeliculas_horizontal(context, sigleitem);

holder.recyclerView.setHasFixedSize(true);
holder.recyclerView.setLayoutManager(new 
LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false));
holder.recyclerView.setAdapter(Horizontal);

}

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

 public class ViewHolder extends RecyclerView.ViewHolder {
 TextView nombre;
 RecyclerView recyclerView;

 public ViewHolder(View itemview) {
    super(itemview);
    nombre =  itemview.findViewById(R.id.textView_vertical);
    recyclerView =  itemview.findViewById(R.id.recyclerview_vertical2);
}
}
}

Это помечает меня ошибка.

play.downloads.downloadmovies E/AndroidRuntime: FATAL EXCEPTION: main Process: play.downloads.downloadmovies, PID: 12835 java.lang.NullPointerException: Attempt to invoke virtual method 'android.widget.Filter play.downloads.downloadmovies.adapter.adapterPeliculas_horizontal.getFilter()' on a null object reference at play.downloads.downloadmovies.MainActivity$2.onQueryTextChange(MainActivity.java:81) at androidx.appcompat.widget.SearchView.onTextChanged(SearchView.java:1182) at androidx.appcompat.widget.SearchView$10.onTextChanged(SearchView.java:1720) at android.widget.TextView.sendOnTextChanged(TextView.java:10688) at android.widget.TextView.handleTextChanged(TextView.java:10799) at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:14175) at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1252) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:573) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:504) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:502) at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:849) at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:618) at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:396) at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:7000) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

Прикрепляю изображение, чтобы его лучше понять. Нажатие на поисковик и я хочу написать останавливает приложение. введите описание изображения здесь

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