2016-11-11 2 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; 
    } 

} 

}

это код для одного из моих фрагментов

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 класс

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

проход в у вас есть несколько методов, таких как putString, putLong, putXXX и т. д., если это ваш собственный класс, а затем реализовать интерфейс сериализации, а затем поместить data.and в соответствующей деятельности получите его ing getIntent.getExtras («передать тот же ключ, который вы используете при вводе данных в дополнительные функции»). и вы можете получить нужные вам данные.

+0

Спасибо за ответ, но мой SecondActivity не может даже открыть или получить тост за работу, если только я могу получить активность, чтобы открыть, затем передача данных станет легкой –