Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按项目时在toast适配器片段中显示消息_Java_Android_Android Fragments_Gridview_Android Recyclerview - Fatal编程技术网

Java 按项目时在toast适配器片段中显示消息

Java 按项目时在toast适配器片段中显示消息,java,android,android-fragments,gridview,android-recyclerview,Java,Android,Android Fragments,Gridview,Android Recyclerview,我试图通过按压一个回收物品来想象一片面包片中的面包,但我看不到 注意:附加到我的类的日志中没有错误 这是我的片段 public class FotoFragment extends Fragment { private Cursor cursor; private int columnIndex; private static final String TAG = "RecyclerViewExample"; private List<DataPictu

我试图通过按压一个回收物品来想象一片面包片中的面包,但我看不到

注意:附加到我的类的日志中没有错误

这是我的片段

public class FotoFragment extends Fragment 
{
    private Cursor cursor;
    private int columnIndex;
    private static final String TAG = "RecyclerViewExample";

    private List<DataPictures> mediaList = new ArrayList<>();
    private RecyclerView mRecyclerView;
    private MediaRVAdapter adapter;
    String type = "";

    public FotoFragment() {
    }

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

        type = "images";
        new MediaAsyncTask().execute(type);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_blank, container, false);
        mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
        return view;
    }

    public class MediaAsyncTask extends AsyncTask<String, Void, Integer> {

        @Override
        protected Integer doInBackground(String... params) {
            Integer result = 0;
            String type = params[0];
            try {
                mediaList = new ArrayList<>();
                if (type.equalsIgnoreCase("images")) {
                    result = 1;
                }
            } catch (Exception e) {
                e.printStackTrace();
                result = 0;
            }
            return result;
        }

        @Override
        protected void onPostExecute(Integer result) {
            if (result == 1) {
                adapter = new MediaRVAdapter(getActivity(), mediaList);
                mRecyclerView.setAdapter(adapter);
                mRecyclerView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(getActivity(), "Click pressed",Toast.LENGTH_SHORT).show();
                    }
                });
            } else {
                Log.e(TAG, "Failed to show list");
            }
        }
    }
}
解决方案:

public class MediaListRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
protected ImageView thumbnail;
protected TextView title;


public MediaListRowHolder(View view) {
    super(view);
    this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
    this.title = (TextView) view.findViewById(R.id.title);
    view.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    Toast.makeText(v.getContext(), "position = " + getPosition(), Toast.LENGTH_SHORT).show();

}

}我认为您可以这样做,例如以下代码:

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

/**
 * Author:Administrator on 2016/9/2 0002 20:37
 * Contact:289168296@qq.com
 */
public abstract class OnItemSelectedListener implements RecyclerView.OnItemTouchListener{

  private final GestureDetector mGestureDetector;

  public OnItemSelectedListener(Context context){
   mGestureDetector = new GestureDetector(context,
       new GestureDetector.SimpleOnGestureListener(){

         @Override public boolean onSingleTapUp(MotionEvent e) {
           return true;
         }
       });
  }

  public abstract void onItemSelected(RecyclerView.ViewHolder holder, int position);

  @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
    if (mGestureDetector.onTouchEvent(e)) {
      View touchedView = rv.findChildViewUnder(e.getX(), e.getY());
      onItemSelected(rv.findContainingViewHolder(touchedView),
          rv.getChildAdapterPosition(touchedView));
    }
    return false;
  }

  @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) {
    throw new UnsupportedOperationException("Not implemented");
  }

  @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
    throw new UnsupportedOperationException("Not implemented");
  }
}
然后到RecycleView注册事件,可以处理该事件:

private RecyclerView grid;

  grid.setAdapter(new PhotoAdapter(this, relevantPhotos));
    grid.addOnItemTouchListener(new OnItemSelectedListener(MainActivity.this) {
      @Override public void onItemSelected(RecyclerView.ViewHolder holder, int position) {
        if (!(holder instanceof PhotoViewHolder)) {
          return;
        }
        PhotoItemBinding binding = ((PhotoViewHolder) holder).getBinding();
        final Intent intent = getDetailActivityStartIntent(MainActivity.this, relevantPhotos, position, binding);
        final ActivityOptions activityOptions = getActivityOptions(binding);
        MainActivity.this.startActivityForResult(intent, IntentUtil.REQUEST_CODE,
            activityOptions.toBundle());
      }
    });
PhotoAdapter.java:

import android.content.Context;
import android.databinding.DataBindingUtil;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import com.googlesamples.unsplash.R;
import com.googlesamples.unsplash.data.model.Photo;
import com.googlesamples.unsplash.databinding.PhotoItemBinding;
import com.googlesamples.unsplash.ui.ImageSize;
import java.util.ArrayList;

public class PhotoAdapter extends RecyclerView.Adapter<PhotoViewHolder> {

    private final ArrayList<Photo> photos;
    private final int requestedPhotoWidth;
    private final LayoutInflater layoutInflater;

    public PhotoAdapter(@NonNull Context context, @NonNull ArrayList<Photo> photos) {
        this.photos = photos;
        requestedPhotoWidth = context.getResources().getDisplayMetrics().widthPixels;
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public PhotoViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
        return new PhotoViewHolder((PhotoItemBinding) DataBindingUtil.inflate(layoutInflater,
                R.layout.photo_item, parent, false));
    }

    @Override
    public void onBindViewHolder(final PhotoViewHolder holder, final int position) {
        PhotoItemBinding binding = holder.getBinding();
        Photo data = photos.get(position);
        binding.setData(data);
        binding.executePendingBindings();
        Glide.with(layoutInflater.getContext())
                .load(holder.getBinding().getData().getPhotoUrl(requestedPhotoWidth))
                .placeholder(R.color.placeholder)
                .override(ImageSize.NORMAL[0], ImageSize.NORMAL[1])
                .into(holder.getBinding().photo);
    }

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

    @Override
    public long getItemId(int position) {
        return photos.get(position).id;
    }
}
导入android.content.Context;
导入android.databinding.DataBindingUtil;
导入android.support.annotation.NonNull;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.ViewGroup;
导入com.bumptech.glide.glide;
导入com.googlesamples.unsplash.R;
导入com.googlesamples.unsplash.data.model.Photo;
导入com.googlesamples.unsplash.databinding.PhotoItemBinding;
导入com.googlesamples.unsplash.ui.ImageSize;
导入java.util.ArrayList;
公共类PhotoAdapter扩展了RecyclerView.Adapter{
私人最终ArrayList照片;
私有最终整数请求的PhotoWidth;
私人最终裁员;
公共PhotoAdapter(@NonNull上下文,@NonNull数组列表照片){
this.photos=照片;
requestedPhotoWidth=context.getResources().getDisplayMetrics().widthPixels;
layoutInflater=layoutInflater.from(上下文);
}
@凌驾
public PhotoViewHolder onCreateViewHolder(最终视图组父级,int-viewType){
返回新的PhotoViewHolder((PhotoItemBinding)数据绑定直到充气(LayoutFlater,
R.layout.photo_项,父项,false);
}
@凌驾
公共无效onBindViewHolder(最终PhotoViewHolder,最终int位置){
PhotoItemBinding=holder.getBinding();
照片数据=照片。获取(位置);
binding.setData(数据);
binding.executePendingBindings();
Glide.with(layoutInflater.getContext())
.load(holder.getBinding().getData().getPhotoUrl(requestedPhotoWidth))
.placeholder(R.color.placeholder)
.override(ImageSize.NORMAL[0],ImageSize.NORMAL[1])
.into(holder.getBinding().photo);
}
@凌驾
public int getItemCount(){
返回照片。大小();
}
@凌驾
公共长getItemId(int位置){
返回照片。获取(位置)。id;
}
}
谢谢,用另一种方法解决问题,我会更新答案
private RecyclerView grid;

  grid.setAdapter(new PhotoAdapter(this, relevantPhotos));
    grid.addOnItemTouchListener(new OnItemSelectedListener(MainActivity.this) {
      @Override public void onItemSelected(RecyclerView.ViewHolder holder, int position) {
        if (!(holder instanceof PhotoViewHolder)) {
          return;
        }
        PhotoItemBinding binding = ((PhotoViewHolder) holder).getBinding();
        final Intent intent = getDetailActivityStartIntent(MainActivity.this, relevantPhotos, position, binding);
        final ActivityOptions activityOptions = getActivityOptions(binding);
        MainActivity.this.startActivityForResult(intent, IntentUtil.REQUEST_CODE,
            activityOptions.toBundle());
      }
    });
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import com.googlesamples.unsplash.R;
import com.googlesamples.unsplash.data.model.Photo;
import com.googlesamples.unsplash.databinding.PhotoItemBinding;
import com.googlesamples.unsplash.ui.ImageSize;
import java.util.ArrayList;

public class PhotoAdapter extends RecyclerView.Adapter<PhotoViewHolder> {

    private final ArrayList<Photo> photos;
    private final int requestedPhotoWidth;
    private final LayoutInflater layoutInflater;

    public PhotoAdapter(@NonNull Context context, @NonNull ArrayList<Photo> photos) {
        this.photos = photos;
        requestedPhotoWidth = context.getResources().getDisplayMetrics().widthPixels;
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public PhotoViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
        return new PhotoViewHolder((PhotoItemBinding) DataBindingUtil.inflate(layoutInflater,
                R.layout.photo_item, parent, false));
    }

    @Override
    public void onBindViewHolder(final PhotoViewHolder holder, final int position) {
        PhotoItemBinding binding = holder.getBinding();
        Photo data = photos.get(position);
        binding.setData(data);
        binding.executePendingBindings();
        Glide.with(layoutInflater.getContext())
                .load(holder.getBinding().getData().getPhotoUrl(requestedPhotoWidth))
                .placeholder(R.color.placeholder)
                .override(ImageSize.NORMAL[0], ImageSize.NORMAL[1])
                .into(holder.getBinding().photo);
    }

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

    @Override
    public long getItemId(int position) {
        return photos.get(position).id;
    }
}