如何在android fragment中使用onClick为列表中的不同项目创建自定义列表?

如何在android fragment中使用onClick为列表中的不同项目创建自定义列表?,android,android-fragments,android-recyclerview,android-listfragment,Android,Android Fragments,Android Recyclerview,Android Listfragment,我可以使用ListFragment来实现我上面所说的吗?或者我需要一个片段内的自定义回收器视图,我尝试在片段内放置一个回收器视图,但我不知道如何使onClick for recycler视图与片段一起工作,以便在多窗格UI的情况下将数据传递给另一个片段或另一个活动,所以,我可以使用列表片段,或者我唯一的选择是“回收器”视图,如果是,那么我如何在“回收器”视图中执行呢 my MainActivity,其中包含一个包含回收器视图的片段 public class MainActivity extend

我可以使用ListFragment来实现我上面所说的吗?或者我需要一个片段内的自定义回收器视图,我尝试在片段内放置一个回收器视图,但我不知道如何使onClick for recycler视图与片段一起工作,以便在多窗格UI的情况下将数据传递给另一个片段或另一个活动,所以,我可以使用列表片段,或者我唯一的选择是“回收器”视图,如果是,那么我如何在“回收器”视图中执行呢

my MainActivity,其中包含一个包含回收器视图的片段

public class MainActivity extends AppCompatActivity {

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

    FragmentManager fm = getSupportFragmentManager();

    Fragment fragment = fm.findFragmentById(R.id.main_fragment_container);

    if (fragment == null) {
        fragment = new FragmentRecyclerList();

        fm.beginTransaction()
                .add(R.id.main_fragment_container, fragment)
                .commit();
    }

}
}
public class FragmentRecyclerList extends Fragment implements MyDialog.OnInputSelected {

private RecyclerView recyclerView;
private RecyclerViewAdapter recyclerViewAdapter;
private List<String> titles;
private FloatingActionButton fab;

public FragmentRecyclerList() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_fragment_recycler_list, container, false);
}

void showDialog() {
    MyDialog myDialog = new MyDialog();
    myDialog.setTargetFragment(FragmentRecyclerList.this, 1);
    myDialog.show(getFragmentManager(), "MyDialog");
}

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

    recyclerView = getView().findViewById(R.id.recyclerview);
    fab = getView().findViewById(R.id.floatingActionButton);

    titles = new ArrayList<>();

    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    recyclerViewAdapter = new RecyclerViewAdapter(getActivity(), titles);

    recyclerView.setAdapter(recyclerViewAdapter);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog();
        }
    });


}
}
包含回收器视图的我的片段

public class MainActivity extends AppCompatActivity {

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

    FragmentManager fm = getSupportFragmentManager();

    Fragment fragment = fm.findFragmentById(R.id.main_fragment_container);

    if (fragment == null) {
        fragment = new FragmentRecyclerList();

        fm.beginTransaction()
                .add(R.id.main_fragment_container, fragment)
                .commit();
    }

}
}
public class FragmentRecyclerList extends Fragment implements MyDialog.OnInputSelected {

private RecyclerView recyclerView;
private RecyclerViewAdapter recyclerViewAdapter;
private List<String> titles;
private FloatingActionButton fab;

public FragmentRecyclerList() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_fragment_recycler_list, container, false);
}

void showDialog() {
    MyDialog myDialog = new MyDialog();
    myDialog.setTargetFragment(FragmentRecyclerList.this, 1);
    myDialog.show(getFragmentManager(), "MyDialog");
}

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

    recyclerView = getView().findViewById(R.id.recyclerview);
    fab = getView().findViewById(R.id.floatingActionButton);

    titles = new ArrayList<>();

    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    recyclerViewAdapter = new RecyclerViewAdapter(getActivity(), titles);

    recyclerView.setAdapter(recyclerViewAdapter);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog();
        }
    });


}
}
公共类FragmentRecyclerList扩展片段实现MyDialog.OnInputSelected{
私人回收站;
私人回收服务适配器回收服务适配器;
私人名单标题;
私人浮动按钮制造厂;
公共碎片回收者列表(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
返回充气机。充气(R.layout.fragment\u fragment\u recycler\u list,容器,错误);
}
void showDialog(){
MyDialog MyDialog=新建MyDialog();
setTargetFragment(FragmentRecyclerList.this,1);
显示(getFragmentManager(),“myDialog”);
}
@凌驾
ActivityCreated上的公共无效(@Nullable Bundle savedinStateCState){
super.onActivityCreated(savedInstanceState);
recyclerView=getView().findViewById(R.id.recyclerView);
fab=getView().findViewById(R.id.floatingActionButton);
titles=新的ArrayList();
setLayoutManager(新的LinearLayoutManager(getActivity());
RecycleServiceAdapter=新的RecycleServiceAdapter(getActivity(),titles);
设置适配器(RecycleWebAdapter);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
showDialog();
}
});
}
}
我的回收器视图适配器 公共类RecycleServiceAdapter扩展 RecyclerView.适配器{

private Context context;
private List<String> titles;

public RecyclerViewAdapter(Context context, List<String> titles) {
    this.context = context;
    this.titles = titles;
}

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

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    String title = titles.get(position);
    holder.tvTitle.setText(title);
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    public TextView tvTitle;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        View v = itemView;
        tvTitle = itemView.findViewById(R.id.row_title);

    }
}
}
私有上下文;
私人名单标题;
公共RecycleServiceAdapter(上下文、列表标题){
this.context=上下文;
this.titles=标题;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View=LayoutFlater.from(parent.getContext())。充气(R.layout.row\u墙纸
,家长,假);
返回新的ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,int位置){
字符串title=titles.get(位置);
holder.tvTitle.setText(标题);
}
@凌驾
public int getItemCount(){
返回titles.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图tvTitle;
公共视图持有者(@NonNull View itemView){
超级(项目视图);
视图v=项目视图;
tvTitle=itemView.findviewbyd(R.id.row\u title);
}
}
}

寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处我清除了一些不必要的代码,就像我说的,我只想在片段中有一个自定义列表,通过单击它打开一个新活动或更新片段数据,所以我想知道我是只能用recycler视图还是也可以用ListFragment,对自定义列表中的不同项目进行不同的单击。如果ListFragment适合您,那么就没有理由迁移。如果您正在编写一个新的UI,最好使用RecyclerView。它可以工作,但可以处理整行的单击,我希望该行中的每个项目都有不同的onclick操作。然后使用RecyclerView。