Объединение двух в основном похожих адаптеров для переработчика - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть два адаптера, которые адаптируются к виду переработчика в зависимости от различных условий. Я хочу объединить их.

Проблема в том, что я сначала создал в том же файле, что и действие, в котором он используется, а другой - в новом файле.

Примите это следующим образом: DefaultAdapter находится в файле, где он используется. AutoCompleteAdapter также используется в том же файле, но объявлен в другом файле.

Я хочу избавиться от адаптера по умолчанию и получить его функции в AutoCompleteAdapter.

Есть некоторые проблемы с ним: Iбольше не могу использовать переменные ParentFiles.

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


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

    private Context context;
    private AdapterView.OnItemClickListener onItemClickListener;
    List<String> searchList;

    @NonNull @Override
    public DefaultAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
      View view = (View) LayoutInflater.from(parent.getContext())
        .inflate(android.R.layout.simple_list_item_1, null);
      ViewHolder holder = new ViewHolder(view);
      return holder;
    }

    @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
      holder.txt.setText(
        Html.fromHtml(getItem(position)).toString());///need to get rid of this error
    }

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

    @NonNull public String getItem(int position) {
      return searchList.get(position);
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
      TextView txt;

      public ViewHolder(@NonNull View itemView) {
        super(itemView);
        txt = itemView.findViewById(android.R.id.text1);
        itemView.setOnClickListener(new View.OnClickListener() {
          @Override public void onClick(View v) {
            String title = txt.getText().toString();
            searchPresenter.saveSearch(title);
          }
        });
        itemView.setOnLongClickListener(new View.OnLongClickListener() {
          @Override public boolean onLongClick(View v) {
            String searched = txt.getText().toString();
            deleteSpecificSearchDialog(searched);
            return true;
          }
        });
      }
    }
  }

Обратите внимание на SearchPresenter. Это переменная в родительском файле, которая вызывает серьезные проблемы. Адаптер автозаполнения не должен использовать его, но по умолчанию должен.

Это адаптер, который я хочу объединить в

public class AutoCompleteAdapter extends RecyclerView.Adapter<AutoCompleteAdapter.ViewHolder>
  implements Filterable {

  @Inject JNIKiwix currentJNIReader;
  @Inject SharedPreferenceUtil sharedPreferenceUtil;
  @Inject ZimReaderContainer zimReaderContainer;
  private List<String> data;
  private KiwixFilter kiwifilter;
  private Context context;

  public AutoCompleteAdapter(Context context) {
    this.context = context;
    data = new ArrayList<>();
    kiwifilter = new KiwixFilter();
    setupDagger();
  }

  private void setupDagger() {
    CoreApp.getCoreComponent().inject(this);
  }

  @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = (View) LayoutInflater.from(parent.getContext())
      .inflate(android.R.layout.simple_list_item_1, null);
    ViewHolder holder = new ViewHolder(view);
    return holder;
  }

  @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.title.setText(Html.fromHtml(getItem(position)).toString());
  }
  @Override
  public String getItem(int index) {
    String a = data.get(index);
    if (a.endsWith(".html")) {
      String trim = a.substring(2);
      trim = trim.substring(0, trim.length() - 5);
      return trim.replace("_", " ");
    } else {
      return a;
    }
  }

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

  public class ViewHolder extends RecyclerView.ViewHolder {
    TextView title;

    public ViewHolder(@NonNull View itemView) {
      super(itemView);
      title = itemView.findViewById(android.R.id.text1);
    }
  }
}
...

Обратите внимание на сходство между ними, они почтианалогично, autocompleteadapter похож на расширенный набор defaultadapter.

Я просто хочу избавиться от адаптера по умолчанию.

Примечание: я отрубил некоторые другие вещи из autocompeleteadapter, я думаю, что они не требуютсядля проблемы. Нуб тут ... Спасибо

...