Java 列表提示MClick不工作。

Java 列表提示MClick不工作。,java,android,android-fragments,Java,Android,Android Fragments,我有一个片段和一个食谱列表。但是我不能让你的电脑工作。。。 我用onListItemClick试过,但似乎也不起作用 我的碎片 public class RecipeBookListViewFragment extends ListFragment implements AdapterView.OnItemClickListener { private List<Recipe> recipes; private DataPassListener mCallback; privat

我有一个片段和一个食谱列表。但是我不能让你的电脑工作。。。 我用onListItemClick试过,但似乎也不起作用

我的碎片

public class RecipeBookListViewFragment extends ListFragment implements AdapterView.OnItemClickListener {

private List<Recipe> recipes;
private  DataPassListener mCallback;
private ListView recipeList;

public interface DataPassListener{
    public void passData(Recipe recipe);
}


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

    RecipeBookActivity.CONTEXT = getActivity().getApplicationContext();

}


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


@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    fillRecipeBook();
    getListView().setOnItemClickListener(this);

}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
    Recipe recipe = (Recipe) getListAdapter().getItem(position);
    final ProgressDialog dialog = ProgressDialog.show(getActivity(), "", "halloooooo...");

    mCallback.passData(recipe);
}

@Override
public void onViewCreated(View v, Bundle savedInstanceState){
    super.onViewCreated(v,savedInstanceState);

    recipeList = getListView();
    recipeList.setClickable(true);
}


@Override
public void onAttach(Activity activity){
    super.onAttach(activity);

    try {
        mCallback = (DataPassListener)activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement DataPassListener");
    }
}

private void fillRecipeBook(){

    final ProgressDialog dialog = ProgressDialog.show(getActivity(), "", "loading...");
    RestClient.ApiInterface service = RestClient.getClient();
    Call<List<Recipe>> call = service.recipes();
    call.enqueue(new Callback<List<Recipe>>() {
        @Override
        public void onResponse(Response<List<Recipe>> response, Retrofit retrofit) {
            dialog.dismiss();
            Log.d("MainActivity", "Status Code = " + response.code());
            if (response.isSuccess()) {
                // request successful (status code 200, 201)
                recipes = response.body();
                ArrayAdapter<String> adapter = new RecipeListAdapter(getActivity(), recipes);

                setListAdapter(adapter);

            } else {
                // response received but request not successful (like 400,401,403 etc)
                //Handle errors
            }
        }

        @Override
        public void onFailure(Throwable t) {
            Log.d("MainActivity", "GOE KAPOT " + t.getMessage());
            dialog.dismiss();
        }
    });


}
}

在ListView注册任何单击之前,需要将ListView设置为
onItemClickListener
。将您的
onViewCreated
代码更改为:

@Override
public void onViewCreated(View v, Bundle savedInstanceState){
    super.onViewCreated(v,savedInstanceState);

    recipeList = getListView();
    recipeList.setOnItemClickListener(this);
}

这样,在ListView上单击的任何项目都将在片段中覆盖的
onItemClick()
方法中进行处理。

我无法单击列表中的项目…我将其放在onViewCreated中,但它仍然无法启用我的项目上的单击功能。好的,显然它按照您告诉我的方式工作。我还需要将我的文本视图设置为可点击:false。问题似乎在于我的ListFragment的性能。当点击一个项目时,加载我的另一个片段需要几秒钟甚至几分钟。
<ListView android:id="@android:id/list" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="#FFCC00"
    android:dividerHeight="2dp"/>

<TextView android:id="@+id/recipe_title" android:layout_width="match_parent"
    android:layout_height="match_parent" android:gravity="left"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"/>
public class RecipeListAdapter extends ArrayAdapter{

private Context context;
private boolean useList = true;
private List<Recipe> recipes;

public RecipeListAdapter(Context context, List<Recipe> recipes) {
    super(context,-1, recipes);
    this.context = context;
    this.recipes = recipes;
}

private class ViewHolder{
    TextView titleText;
}


public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    Recipe recipe = (Recipe)getItem(position);
    View viewToUse;


    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        if(useList){
            viewToUse = mInflater.inflate(R.layout.fragment_recipeitem_list, null);
        } else {
            viewToUse = mInflater.inflate(R.layout.fragment_recipeitem_grid, null);
        }

        holder = new ViewHolder();
        holder.titleText = (TextView)viewToUse.findViewById(R.id.recipe_title);
        viewToUse.setTag(holder);
    } else {
        viewToUse = convertView;
        holder = (ViewHolder) viewToUse.getTag();
    }

    holder.titleText.setText(recipe.getTitle());
    return viewToUse;
}

}
public class RecipeBookActivity extends Activity implements DataPassListener {

public static Context CONTEXT;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recipe);


    if(findViewById(R.id.recipe_list_fragment) != null){
        if (savedInstanceState != null)
            return;

        RecipeBookListViewFragment recipeBookListViewFragmentFragment = new RecipeBookListViewFragment();
        recipeBookListViewFragmentFragment.setArguments(getIntent().getExtras());
        getFragmentManager().beginTransaction().add(R.id.recipe_list_fragment,
                recipeBookListViewFragmentFragment).commit();

    }
}

@Override
public void passData(Recipe recipe){
    RecipeFragment recipeFragment = new RecipeFragment();
    Bundle args = new Bundle();

    args.putSerializable(recipeFragment.DATA_RECEIVE, recipe);
    recipeFragment.setArguments(args);

    getFragmentManager().beginTransaction()
            .replace(R.id.recipe_list_fragment, recipeFragment)
            .commit();
}
}
@Override
public void onViewCreated(View v, Bundle savedInstanceState){
    super.onViewCreated(v,savedInstanceState);

    recipeList = getListView();
    recipeList.setOnItemClickListener(this);
}