Android:从Recycler View到Activity的意图

时间:2015-08-05 00:54:13

标签: android android-intent

我有一个回收站视图,其中包含许多我希望从每个项目到特定活动的项目。我尝试了很多方法,但都未能参与活动。

这是适配器:

public class ItemsAdapter extends RecyclerView.Adapter<ItemsAdapter.ViewHolder> {
private ArrayList<String> itemsData;

public ItemsAdapter(ArrayList<String> itemsData) {
    this.itemsData = itemsData;
}


@Override
public ItemsAdapter.ViewHolder onCreateViewHolder(final ViewGroup parent,
                                              int viewType) {
    View itemLayoutView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item, null);

    final ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    itemLayoutView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          String word =   viewHolder.txtViewTitle.getText().toString();
            Toast.makeText(parent.getContext(),word,Toast.LENGTH_LONG).show();
        }
    });
    return viewHolder;
}




@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {



    viewHolder.txtViewTitle.setText(itemsData.get(position));
    viewHolder.imgViewIcon.setImageResource(R.drawable.imsge_profile);

}


public static class ViewHolder extends RecyclerView.ViewHolder {

 public   TextView txtViewTitle;
 public   ImageView imgViewIcon;

    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);
        txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
        imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
    }
}


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

}

这是main_activity

public class MainActivity extends ActionBarActivity {
Toolbar tBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tBar = (Toolbar) findViewById(R.id.app_bar);
    setSupportActionBar(tBar);
    getSupportActionBar().setTitle("AdroidCode Recycler View");
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);


    ArrayList<String> listItems = new ArrayList<String>();
    listItems.add("Tom");
    listItems.add("Hamdy");
    listItems.add("John");
    listItems.add("Hasna");
    listItems.add("Fadi");
    listItems.add("Samer");


    recyclerView.setLayoutManager(new LinearLayoutManager(this));


    ItemsAdapter mAdapter = new ItemsAdapter(listItems);


    recyclerView.setAdapter(mAdapter);


    recyclerView.setItemAnimator(new DefaultItemAnimator());


}

}

我试过这个而不是Toast但是很有效率

@Override
public void onClick(View v) {          

    final Intent intent;
    switch (getPostion()){
        case 0:
           intent =  new Intent(context, FirstActivity.class);
           break;

        case 1:
            intent =  new Intent(context, SecondActivity.class);
            break;
           ...
        default:
           intent =  new Intent(context, DefaultActivity.class);
           break;
     }
    context.startActivity(intent);
}

新适配器

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {

public static class PersonViewHolder extends RecyclerView.ViewHolder {

    CardView cv;
    TextView personName;
    TextView personAge;
    ImageView personPhoto;

    public PersonViewHolder(View itemView) {
        super(itemView);
        cv = (CardView)itemView.findViewById(R.id.cv);
        personName = (TextView)itemView.findViewById(R.id.person_name);
        personAge = (TextView)itemView.findViewById(R.id.person_age);
        personPhoto = (ImageView)itemView.findViewById(R.id.person_photo);

        recyclerview.addOnItemTouchListener(new RecyclerItemClickListener(
                context, new RecyclerItemClickListener.OnItemClickListener() {

            @Override
            public void onItemClick(View view, int position) {
                // TODO Auto-generated method stub
                final Intent intent;
                switch (position) {
                    case 0:
                        intent = new Intent(context, secoundActivity.class);
                        break;
                }
            }

            ));
        }}
}

List<Person> persons;

RVAdapter(List<Person> persons){

    this.persons = persons;
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
    PersonViewHolder pvh = new PersonViewHolder(v);
    return pvh;
}

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
    personViewHolder.personName.setText(persons.get(i).name);
    personViewHolder.personAge.setText(persons.get(i).age);
    personViewHolder.personPhoto.setImageResource(persons.get(i).photoId);
}

@Override
public int getItemCount() {

    return persons.size();
}

}

3 个答案:

答案 0 :(得分:1)

RecyclerView recyclerView = findViewById(R.id.recycler);

recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {

  @Override public void onItemClick(View view, int position) {
    // do whatever
  }
})
);

我认为您需要在初始化回收站视图时添加点击侦听器。请尝试这些

答案 1 :(得分:1)

$('input[name=PercentRate]').on('keydown',function(e){
   //test out the key codes when you press the top and log
   console.log( e.keyCode );
)};

答案 2 :(得分:0)

您不能直接使用onclick。我找到了一个解决方案,它对我有用。试试吧。我希望它会对你有所帮助。

步骤1:Fist将此RecyclerItemClickListener类添加到您的包中。

public class RecyclerItemClickListener implements
		RecyclerView.OnItemTouchListener {
	private OnItemClickListener mListener;

	public interface OnItemClickListener {
		public void onItemClick(View view, int position);
	}

	GestureDetector mGestureDetector;

	public RecyclerItemClickListener(Context context,
			OnItemClickListener listener) {
		mListener = listener;
		mGestureDetector = new GestureDetector(context,
				new GestureDetector.SimpleOnGestureListener() {
					@Override
					public boolean onSingleTapUp(MotionEvent e) {
						return true;
					}
				});
	}

	@Override
	public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
		View childView = view.findChildViewUnder(e.getX(), e.getY());
		if (childView != null && mListener != null
				&& mGestureDetector.onTouchEvent(e)) {
			mListener.onItemClick(childView,
					view.getChildPosition(childView));
		}
		return false;
	}

	@Override
	public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
	}
}

第2步:现在使用onclick方法。这会给你点击项目的位置。一旦你获得了职位,你可以根据自己的要求使用它。

recyclerview.addOnItemTouchListener(new RecyclerItemClickListener(
			context, new RecyclerItemClickListener.OnItemClickListener() {

			@Override
			public void onItemClick(View view, int position) {
			// TODO Auto-generated method stub

                 Toast.makeText(MainActivity.this, position + "",
				 Toast.LENGTH_SHORT).show();

                 final Intent intent;
		switch (position) {
		case 0:
		  Toast.makeText(context, "case 0",
						Toast.LENGTH_SHORT).show();
		  intent = new Intent(context,FirstActivity.class);
						break;

		case 1:
		  Toast.makeText(context, "case 1",
						Toast.LENGTH_SHORT).show();
		  intent = new Intent(context,SecondActivity.class);
		  break;

		default:
		  intent = new Intent(context,DefaultActivity.class);
		  break;
						
			}
		}));