Обработка щелчков RecyclerView внутри фрагмента - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь реализовать RecyclerView внутри фрагмента.Я разработал класс CustomAdapter (StateAdapter) для загрузки содержимого RecyclerView и интерфейс StateAdapterOnClickHandler для обработки кликов элементов внутри RecyclerView, но нажатие на элемент не работает.

Вот мой HomeFragment.java который расширяет фрагмент.Я не могу понять, как инициализировать StateAdapterOnClickHandler и где вызвать его метод onItemClick()

public class HomeFragment extends Fragment implements StateAdapter.StateAdapterOnClickHandler {

private View homeFragment;
private RecyclerView recyclerView;

private StateAdapter stateAdapter;

private List<String> states;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

public static HomeFragment newInstance() {
    HomeFragment homeFragment = new HomeFragment();

    return homeFragment;
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    homeFragment = inflater.inflate(R.layout.fragment_home,container,false);
    recyclerView = homeFragment.findViewById(R.id.recyclerview_states);
    states = Arrays.asList(getResources().getStringArray(R.array.india_states));

    LinearLayoutManager layoutManager = new LinearLayoutManager(container.getContext(),LinearLayoutManager.VERTICAL,false);

    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);

    stateAdapter = new StateAdapter();
    stateAdapter.setStateNames(states);
    recyclerView.setAdapter(stateAdapter);

    return homeFragment;
}

@Override
public void onItemClick(String state) {
    Intent intent = new Intent(getActivity(),DetailActivity.class);
    intent.putExtra("State",state);
    startActivity(intent);
}
}

Вот мой StateAdapter класс

public class StateAdapter extends RecyclerView.Adapter<StateAdapter.StateViewHolder> {
private List<String> stateNames;

private final StateAdapterOnClickHandler stateAdapterOnClickHandler;

StateAdapter(StateAdapterOnClickHandler stateAdapterOnClickHandler){

    this.stateAdapterOnClickHandler = stateAdapterOnClickHandler;
}

public interface StateAdapterOnClickHandler {
    void onItemClick(String state);
}

@Override
public StateAdapter.StateViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Context context = parent.getContext();
    int idForListItem = R.layout.state_layout;
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(idForListItem,parent,false);
    return new StateViewHolder(view);
}

@Override
public void onBindViewHolder(StateAdapter.StateViewHolder holder, int position) {
    String stateName = stateNames.get(position);
    holder.mTextView.setText(stateName);
}

@Override
public int getItemCount() {
    if(stateNames == null) return 0;

    return stateNames.size();
}

public class StateViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public final TextView mTextView;
    public StateViewHolder(View itemView) {
        super(itemView);
        mTextView = (TextView) itemView.findViewById(R.id.tv_state_name);
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int clickedPostion = getAdapterPosition();
        String state = stateNames.get(clickedPostion);
        stateAdapterOnClickHandler.onItemClick(state);
    }
}

public void setStateNames(List<String> states) {
    stateNames = states;
    notifyDataSetChanged();
 }
}

Пожалуйста, скажите мнечто не так с кодом при обработке кликов.Я новичок в программировании Android и впервые работаю с фрагментами.Спасибо за помощь.

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