片段中的 onItemClicked()

onItemClicked() in Fragment

我在一个片段中创建了一个 ListView,并使用来自 class onStart() 方法中名为 Workout 的数据填充它。我设置了一个适配器,列表显示正常。我希望现在能够获取用户单击的特定行的值,但无法实现 onItemClicked() 方法。有谁知道我怎样才能得到这个价值?谢谢。

public class WorkoutListFragment extends Fragment {
static interface WorkoutListListener{
    void itemClicked(long id);
}
private WorkoutListListener listener;
private ListView workoutList;
private LayoutInflater inflate;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    inflate = inflater;
    return inflater.inflate(R.layout.fragment_workout_list, container, false);
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.listener = (WorkoutListListener)activity;
}

@Override//ISSUE IS IN HERE
public void onStart() {
    super.onStart();
    View view = getView();
    String[]names = new String[Workout.workouts.length];
    for (int i = 0; i < names.length; i++){
        names[i] = Workout.workouts[i].getName();
    }
    if (view!=null){
        workoutList = (ListView)view.findViewById(R.id.listView);
        ArrayAdapter<String>adapter = new ArrayAdapter<String>(inflate.getContext(),
                android.R.layout.simple_list_item_1,names);
        workoutList.setAdapter(adapter);
    }

    //HOW CAN I NOW GET THE VALUE OF THE ITEM CLICKED?
    // I TRIED THIS BUT IT'S NOT RECOGNIZED
    workoutList.setOnClickListener(new onItemClickListener);
}

使用这个:

workoutList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          // the 'position' argument is the position you are looking for
     }
});

编辑:

我注意到您没有初始化 workoutList listView。您应该在 OnCreateView 方法中执行此操作:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_workout_list, container, false);
    workoutList = (ListView) view.findViewById(R.id.workoutListView); // assuming that your listView's id is "@+id/workoutListView"
    return view;
}