RecyclerView 单击以将数据传递给新活动 [英] RecyclerView Click to pass data to new activity

查看:23
本文介绍了RecyclerView 单击以将数据传递给新活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在制作一个包含三个选项卡的应用程序,每个选项卡都有一个带有两个文本的 recyclerview,我希望用户能够单击任何 recyclerview 项目,并且该项目中的文本应该传递给一个新活动.

I am making an app with three tabs, each tab is having a recyclerview with two text, i want the user to be able to click on any recyclerview item and the text in that item should be passed to a new activity.

这是应用外观的图片.

这是我的 MainActivity 代码

Here is my code for 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;
    }

}

}

这是我的片段之一的代码

this is code for one of my Fragments

public class OneFragment extends Fragment {

public OneFragment() {
    // Required empty public constructor
}

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

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_one, container, false);

    RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
    rv.setHasFixedSize(true);
    MyAdapter adapter = new MyAdapter(new String[]{"1 Grace", "test two", "test three", "test four", "test five", "test six", "test seven"});
    rv.setAdapter(adapter);

    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    rv.setLayoutManager(llm);

    return rootView;
}

public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ViewHolder> {
    private static final int LENGTH = 50;

    public ContentAdapter() {
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
            super(inflater.inflate(R.layout.singleitemview, parent, false));
        }

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), SingleItemView.class);
            Toast.makeText(getActivity(),
                    "Your Message", Toast.LENGTH_LONG).show();
            startActivity(intent);
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        ViewHolder viewHolder = new ViewHolder(LayoutInflater.from(parent.getContext()), parent);
        return viewHolder;

    }

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

    @Override
    public int getItemCount() {
        return LENGTH;
    }
}

}

我还有一个 ViewHolder 类

And i also have a ViewHolder class

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 以在回收站视图上显示项目

Now i want to open SingleItemView.class to display items on the recycler view

请帮帮我

推荐答案

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

You can pass the data set into the adapter constructor and reference the data set whenever an item is clicked. Most of the trick is inside the ViewHolder implementation. Assuming that the data set contains String values, it should look more or less like this:

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

这篇关于RecyclerView 单击以将数据传递给新活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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