在片段

时间:2018-06-07 19:34:09

标签: java android android-fragments android-recyclerview

我正在尝试在Fragment中实现RecyclerView。我设计了一个CustomAdapter(StateAdapter)类来加载RecyclerView的内容和一个接口StateAdapterOnClickHandler来处理RecyclerView中项目的onClicks,但点击项目并不起作用。

这是我的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编程的新手,这是我第一次使用Fragments。谢谢你的帮助。

0 个答案:

没有答案