安卓:从意向查看回收站到活动 [英] Android:Intent from Recycler View to Activity
问题描述
我有了,我想从意向的每一项具体活动的许多项的回收视图。我试过很多方法,但都失败意图的活动。
这是适配器:
公共类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添加到您的包
。
公共类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
第二步:现在使用的onclick方法。这给你项目的位置点击。一旦你的位置比你可以使用它按您的要求。
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
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屋!