Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView单击将数据传递给新活动_Android_Onclick_Android Recyclerview - Fatal编程技术网

Android RecyclerView单击将数据传递给新活动

Android RecyclerView单击将数据传递给新活动,android,onclick,android-recyclerview,Android,Onclick,Android Recyclerview,我正在制作一个包含三个选项卡的应用程序,每个选项卡都有一个包含两个文本的recyclerview,我希望用户能够单击任何recyclerview项目,并且该项目中的文本应传递给新活动 这是我的MainActivity代码 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s

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

这是我的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;
    }

}
}

现在我想打开SingleItemView.class以在recycler视图上显示项目


请帮助我

传入intent extras。有几种方法可用,如putString、putLong、putXXX等。如果是自定义类,则实现序列化接口,然后放入数据。在各自的活动中,使用getIntent.getExtras(“传递将数据放入extras时使用的同一密钥”)获取它。您可以获得所需的数据。

传入intent extras。有几种方法可用,如putString、putLong、putXXX等。如果它是您的自定义类,则实现序列化接口,然后放入数据。在各自的活动中,使用getIntent.getExtras(“传递将数据放入extras时使用的同一密钥”)获取数据。您可以获得所需的数据。

您可以将数据集传递到适配器构造函数中,并在单击某个项时引用该数据集。大部分技巧都在
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);
      }
    });
  }
}

您可以将数据集传递到适配器构造函数中,并在单击项时引用该数据集。大部分技巧都在
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);
      }
    });
  }
}

哪一部分你有问题?你能在不传递文本的情况下开始一个新的活动吗?不,我不能开始一个新的活动。你应该找一个说明如何做的教程。你在哪部分有问题?你能在不传递文本的情况下开始一项新活动吗?不,我不能开始一项新活动。你应该找一个教程来说明如何开始。谢谢你的回答,但我的第二项活动甚至不能开始,也不能为工作干杯,如果我能让活动开始,那么传递数据将变得很容易。谢谢你的回答,但是,我的第二个活动甚至无法打开,也无法为工作干杯,如果我能够打开该活动,那么传递数据将变得很容易
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);
      }
    });
  }
}