2016-11-11 25 views
0

我想提出三个选项卡的应用程序,每个选项卡有两个文本recyclerview,我希望用户能够点击任何recyclerview项目,在该项目的文本应被传递给新的活动。RecyclerView点击将数据传递到新的活动

This is an image of how the app looks like.

这里是我的代码MainActivity

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    // Get the ViewPager and set it's PagerAdapter so that it can display items 
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    PagerAdapter pagerAdapter = 
      new PagerAdapter(getSupportFragmentManager(), MainActivity.this); 
    viewPager.setAdapter(pagerAdapter); 

    // Give the TabLayout the ViewPager 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    tabLayout.setupWithViewPager(viewPager); 

    // Iterate over all tabs and set the custom view 
    for (int i = 0; i < tabLayout.getTabCount(); i++) { 
     TabLayout.Tab tab = tabLayout.getTabAt(i); 
     tab.setCustomView(pagerAdapter.getTabView(i)); 
    } 

} 


@Override 
public void onResume() { 
    super.onResume(); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

class PagerAdapter extends FragmentPagerAdapter { 

    String tabTitles[] = new String[] { "Tab 1", "Tab 2", "Tab 3" }; 
    Context context; 

    public PagerAdapter(FragmentManager fm, Context context) { 
     super(fm); 
     this.context = context; 
    } 

    @Override 
    public int getCount() { 
     return tabTitles.length; 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 
       return new OneFragment(); 
      case 1: 
       return new TwoFragment(); 
      case 2: 
       return new ThreeFragment(); 
     } 

     return null; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     // Generate title based on item position 
     return tabTitles[position]; 
    } 

    public View getTabView(int position) { 
     View tab = LayoutInflater.from(MainActivity.this).inflate(R.layout.custom_tab, null); 
     TextView tv = (TextView) tab.findViewById(R.id.custom_text); 
     tv.setText(tabTitles[position]); 
     return tab; 
    } 

} 

}

这是我的一个片段代码

​​

}

,我也有一个ViewHolder类

public class ViewHolder extends RecyclerView.ViewHolder { 
public ViewHolder(LayoutInflater inflater, ViewGroup parent) { 
    super(inflater.inflate(R.layout.singleitemview, parent, false)); 
    itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Context context = v.getContext(); 
      Intent intent = new Intent(context, SingleItemView.class); 
      context.startActivity(intent); 
     } 
    }); 
} 

}

现在我想开SingleItemView.class上显示回收站视图中的项目

请帮我

+0

你有麻烦哪一部分?你能否在不通过文字的情况下开始新的活动? –

+0

不,我无法开始新的活动 –

+0

你应该找一个教程来说明如何做到这一点 –

回答

2

您可以将数据集传递给适配器构造函数,并在单击项目时引用数据集。大部分技巧都在ViewHolder实现中。假设数据集包含String值,它应该或多或少是这样的:

public class ViewHolder extends RecyclerView.ViewHolder { 
    public ViewHolder(LayoutInflater inflater, ViewGroup parent) { 
    super(inflater.inflate(R.layout.singleitemview, parent, false)); 
    itemView.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     int position = getAdapterPosition(); 

     Context context = v.getContext(); 
     Intent intent = new Intent(context, SingleItemView.class); 
     intent.putExtra("com.package.sample.ITEM_DATA", mDataset.get(position)); 
     context.startActivity(intent); 
     } 
    }); 
    } 
} 
2

传中intent extras.there有几种方法可用,如putString,putLong,putXXX等,如果它是你的自定义类,然后实现序列化接口,然后把data.and放在各自的活动中获取它getIntent.getExtras(“传入将数据放入额外值时使用的相同密钥”)。你可以得到你想要的数据。

+0

谢谢你的答案,但我的SecondActivity甚至不能打开或得到敬酒的工作,只要我可以得到活动打开,然后传递数据将变得容易 –

相关问题