安卓:从意向查看回收站到活动 [英] Android:Intent from Recycler View to Activity

查看:150
本文介绍了安卓:从意向查看回收站到活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有了,我想从意向的每一项具体活动的许多项的回收视图。我试过很多方法,但都失败意图的活动。

这是适配器:

 公共类ItemsAdapter扩展RecyclerView.Adapter< ItemsAdapter.ViewHolder> {
私人的ArrayList<串GT; itemsData;公共ItemsAdapter(ArrayList的<串GT; itemsData){
    this.itemsData = itemsData;
}
@覆盖
公共ItemsAdapter.ViewHolder onCreateViewHolder(最终母公司的ViewGroup,
                                              INT viewType){
    查看itemLayoutView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item,NULL);    最后ViewHolder viewHolder =新ViewHolder(itemLayoutView);
    itemLayoutView.setOnClickListener(新View.OnClickListener(){
        @覆盖
        公共无效的onClick(视图v){
          串词= viewHolder.txtViewTitle.getText()的toString()。
            Toast.makeText(parent.getContext(),字Toast.LENGTH_LONG).show();
        }
    });
    返回viewHolder;
}
@覆盖
公共无效onBindViewHolder(ViewHolder viewHolder,INT位置){    viewHolder.txtViewTitle.setText(itemsData.get(位置));
    viewHolder.imgViewIcon.setImageResource(R.drawable.imsge_profile);}
公共静态类ViewHolder扩展RecyclerView.ViewHolder { 公众的TextView txtViewTitle;
 公共ImageView的imgViewIcon;    公共ViewHolder(查看itemLayoutView){
        超(itemLayoutView);
        txtViewTitle =(TextView中)itemLayoutView.findViewById(R.id.item_title);
        imgViewIcon =(ImageView的)itemLayoutView.findViewById(R.id.item_icon);
    }
}
@覆盖
公众诠释getItemCount(){
    返回itemsData.size();
}

}


这是 main_activity

 公共类MainActivity扩展ActionBarActivity {
工具栏TBAR;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    TBAR =(工具栏)findViewById(R.id.app_bar);
    setSupportActionBar(TBAR);
    getSupportActionBar()的setTitle(的Adroid code回收站视图)。
    RecyclerView recyclerView =(RecyclerView)findViewById(R.id.recyclerView);
    ArrayList的<串GT;时listItems =新的ArrayList<串GT;();
    listItems.add(汤姆);
    listItems.add(Hamdy);
    listItems.add(约翰);
    listItems.add(Hasna);
    listItems.add(法迪);
    listItems.add(萨默尔);
    recyclerView.setLayoutManager(新LinearLayoutManager(本));
    ItemsAdapter mAdapter =新ItemsAdapter(listItems中);
    recyclerView.setAdapter(mAdapter);
    recyclerView.setItemAnimator(新DefaultItemAnimator());
}

}


我试过这个,而不是烤面包,但dosent工作

  @覆盖
公共无效的onClick(视图v){    最终意图意图;
    开关(getPostion()){
        情况下0:
           意图=新意图(背景下,FirstActivity.class);
           打破;        情况1:
            意图=新意图(背景下,SecondActivity.class);
            打破;
           ...
        默认:
           意图=新意图(背景下,DefaultActivity.class);
           打破;
     }
    context.startActivity(意向);
}


新的适配器

 公共类RVAdapter扩展RecyclerView.Adapter< RVAdapter.PersonViewHolder> {公共静态类PersonViewHolder扩展RecyclerView.ViewHolder {    CardView简历;
    TextView的PERSONNAME;
    TextView的人士;
    ImageView的personPhoto;    公共PersonViewHolder(查看ItemView控件){
        超(ItemView控件);
        CV =(CardView)itemView.findViewById(R.id.cv);
        PERSONNAME =(TextView中)itemView.findViewById(R.id.person_name);
        人物=(TextView中)itemView.findViewById(R.id.person_age)​​;
        personPhoto =(ImageView的)itemView.findViewById(R.id.person_photo);        recyclerview.addOnItemTouchListener(新RecyclerItemClickListener(
                情况下,新RecyclerItemClickListener.OnItemClickListener(){            @覆盖
            公共无效onItemClick(查看视图,INT位置){
                // TODO自动生成方法存根
                最终意图意图;
                开关(位置){
                    情况下0:
                        意图=新意图(背景下,secoundActivity.class);
                        打破;
                }
            }            ));
        }}
}清单<&人GT;者;RVAdapter(列表<&人GT;人){    this.persons =者;
}@覆盖
公共无效onAttachedToRecyclerView(RecyclerView recyclerView){
    super.onAttachedToRecyclerView(recyclerView);
}@覆盖
公共PersonViewHolder onCreateViewHolder(ViewGroup中ViewGroup中,int i)以{
    视图V = LayoutInflater.from(viewGroup.getContext())膨胀(R.layout.item,ViewGroup中,假的)。
    PersonViewHolder PVH =新PersonViewHolder(V);
    返回PVH;
}@覆盖
公共无效onBindViewHolder(PersonViewHolder personViewHolder,int i)以{
    personViewHolder.personName.setText(persons.get(I)。名称);
    personViewHolder.personAge.setText(persons.get(我)。年龄);
    personViewHolder.personPhoto.setImageResource(persons.get㈠.photoId);
}@覆盖
公众诠释getItemCount(){    返回persons.size();
}

}


解决方案

您不能直接使用的onclick。我已经找到了解决方案,它为我工作。尝试一下。我希望它会帮助你。

第1步:此拳类RecyclerItemClickListener添加到您的包

\r
\r

公共类RecyclerItemClickListener工具\r
RecyclerView.OnItemTouchListener {\r
私人OnItemClickListener mListener;\r
\r
公共接口OnItemClickListener {\r
公共无效onItemClick(查看视图,诠释位);\r
}\r
\r
GestureDetector mGestureDetector;\r
\r
公共RecyclerItemClickListener(上下文的背景下,\r
OnItemClickListener监听){\r
mListener =侦听器;\r
mGestureDetector =新GestureDetector(背景下,\r
新GestureDetector.SimpleOnGestureListener(){\r
@覆盖\r
公共布尔onSingleTapUp(MotionEvent五){\r
返回true;\r
}\r
});\r
}\r
\r
@覆盖\r
公共布尔onInterceptTouchEvent(RecyclerView观点,MotionEvent五){\r
视图childView = view.findChildViewUnder(e.getX(),e.​​getY());\r
如果(childView = NULL&放大器;!&安培;!mListener = NULL\r
&功放;&安培; mGestureDetector.onTouchEvent(E)){\r
mListener.onItemClick(childView,\r
view.getChildPosition(childView));\r
}\r
返回false;\r
}\r
\r
@覆盖\r
公共无效onTouchEvent(RecyclerView观点,MotionEvent motionEvent){\r
}\r
}

\r

\r
\r

第二步:现在使用的onclick方法。这给你项目的位置点击。一旦你的位置比你可以使用它按您的要求。

\r
\r

recyclerview.addOnItemTouchListener(新RecyclerItemClickListener(\r
情况下,新RecyclerItemClickListener.OnItemClickListener(){\r
\r
@覆盖\r
公共无效onItemClick(查看视图,INT位置){\r
// TODO自动生成方法存根\r
\r
                 Toast.makeText(MainActivity.this,位置+,\r
Toast.LENGTH_SHORT).show();\r
\r
                 最终意图意图;\r
开关(位置){\r
情况下0:\r
Toast.makeText(上下文,案例0,\r
Toast.LENGTH_SHORT).show();\r
意图=新意图(背景下,FirstActivity.class);\r
突破;\r
\r
\t\t情况1:\r
Toast.makeText(背景下,案例1\r
Toast.LENGTH_SHORT).show();\r
意图=新意图(背景下,SecondActivity.class);\r
突破;\r
\r
默认情况下:\r
意图=新意图(背景下,DefaultActivity.class);\r
突破;\r
\r
}\r
}));

\r

\r
\r

I have a recycler view that has many items that I want to intent from every item to specific activities. I tried many ways but all fail to intent to the activities.

This is the adapter:

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();
}

}


This is 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());


}

}


i tried this instead of the Toast but dosent work

@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);
}


new adapter

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();
}

}

解决方案

You can not direct use onclick. I have found a solution and it's works for me. Try it. I hope it will helps you.

Step 1: Fist add this RecyclerItemClickListener class to your package.

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) {
	}
}

Step 2: Now use onclick method. this gives you position of item clicked. Once you get position than you can use it as per your requirement.

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;
						
			}
		}));

这篇关于安卓:从意向查看回收站到活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆