Mam pytanie o przejściu kliknęli dane cardview do aktywności, a tu cała historia:Przechodząc RecyclerView CardView kliknięty element danych aktywności
Mam Aktywny nazwie „Szczegóły”, który zawiera 2 TextView w to układ, tytuł & Opis.
Mam zestaw fragmentów (tab_1), które zawierają kody recyklingu i dane przedmiotów, każda pozycja zawiera: tytuł & opis.
Czego chcę:
Gdy użytkownik kliknij element, to otworzyć Szczegóły wydarzenia i zmień tytuł Szczegóły układu z klikniętego tytule produktu, a tym samym do opisu.
Udało mi się stworzyć inną aktywność jako przykład, i postanowiłem ją uruchomić, plus dodanie "addOnTouchlistener" dzięki Stackoverflow, znalazłem sposób, aby to zrobić.
Jak to zrobić przy życiu? Próbowałem wielu sposobów dostępnych odpowiedzi na Stackoverflow, ale wszystkie nie działają lub nie są związane z moją prośbą.
Oto moje pliki:
itemsdata.java:
public class itemsdata {
int CatPic;
String title;
String Descr;
int Exapnd;
int expand_no;
tab_1.java (fragment)
public class tab_1 extends Fragment implements SearchView.OnQueryTextListener {
private RecyclerView mRecyclerView;
public RecyclingViewAdapter adapter;
private Activity context;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.tab_1, container, false);
mRecyclerView = (RecyclerView)layout.findViewById(R.id.recycler_view);
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener
(getContext(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Intent i = new Intent(view.getContext(), DetailsActivity.class);
view.getContext().startActivity(i);
}
}));
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
adapter = new RecyclingViewAdapter(getActivity(),Listed());
mRecyclerView.setAdapter(adapter);
return layout;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.main, menu);
final MenuItem item = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(this);
}
@Override
public boolean onQueryTextChange(String query) {
final List<itemsdata> filteredModelList = filter(Listed(), query);
adapter.animateTo(filteredModelList);
mRecyclerView.scrollToPosition(0);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
private List<itemsdata> filter(List<itemsdata> models, String query) {
query = query.toLowerCase();
final List<itemsdata> filteredModelList = new ArrayList<>();
for (itemsdata model : models) {
final String text = model.title.toLowerCase();
if (text.contains(query)) {
filteredModelList.add(model);
}
}
return filteredModelList;
}
public List<itemsdata> Listed()
{
//Titles Strings
String sys_title1 = getString(R.string.system_item_title_1);
String sys_title2 = getString(R.string.system_item_title_2);
String sys_title3 = getString(R.string.system_item_title_3);
//Description Strings
String sys_descr1 = getString(R.string.system_item_desc_1);
String sys_descr2 = getString(R.string.system_item_desc_2);
String sys_descr3 = getString(R.string.system_item_desc_3);
//Adding New Cards
List<itemsdata> data = new ArrayList<>();
//Categories Icons New Items ** Make It The Same
int[] icons = {
R.drawable.facebook_icon ,
R.drawable.twitter_icon ,
R.drawable.twitter_icon
};
//Expand Button New Items
int[] expandbutton = {
R.drawable.expanded ,
R.drawable.expanded ,
R.drawable.expanded
};
//UnExpand Button New Items
int[] unexpandbutton = {
R.drawable.ca_expand ,
R.drawable.ca_expand ,
R.drawable.ca_expand
};
//Titles New Items
String[] titles = {
sys_title1 ,
sys_title2 ,
sys_title3
};
//Description New Items
String[] Description = {
sys_descr1 ,
sys_descr2 ,
sys_descr3
};
for(int i = 0;i<titles.length && i < icons.length && i < Description.length && i < unexpandbutton.length && i < expandbutton.length ; i++)
{
itemsdata current = new itemsdata();
current.CatPic = icons[i];
current.title = titles[i];
current.Descr = Description[i];
current.expand_no = unexpandbutton[i];
current.Exapnd = expandbutton[i];
data.add(current);
}
return data;
}
}
Szczegóły aktywny:
public class DetailsActivity extends AppCompatActivity{
TextView title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.details);
title = (TextView)findViewById(R.id.details_title);
}
EDIT: Zrobiłem to, dodałem przycisk, który otwiera fragment i przekazuje dane w adapterze, ale chcę go pobrać za pośrednictwem tab_1.java, a nie adaptera, mam na myśli to, że chcę kliknąć element, aby otworzyć fragment, a nie przycisk, tutaj przystawka z mojego kodu adaptera (dodałem go w OnBindViewHolder)
Ustawiłem OnClick i zaimplementowałem Vew.setOnClick ..etc, ale po kliknięciu elementu nic się nie dzieje.
@Override
public void onBindViewHolder(final MyRecycleViewHolder holder, int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(),DetailsActivity.class);
v.getContext().startActivity(i);
}
});
//Referencing Data
final itemsdata currentobject = mdata.get(position);
//Referencing Items
holder.ProbTitle.setText(currentobject.title);
holder.ProbDescr.setText(currentobject.Descr);
holder.CategoryPic.setImageResource(currentobject.CatPic);
holder.ExpandButton.setImageResource(currentobject.Exapnd);
holder.ExpandNoButton.setImageResource(currentobject.expand_no);
//What Happen When You Click Expand Button .
holder.ExpandButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(), DetailsActivity.class);
i.putExtra("TitleKey",holder.ProbTitle.getText().toString());
v.getContext().startActivity(i);
}
}
);
public static class MyRecycleViewHolder extends RecyclerView.ViewHolder
{
SwipeLayout swipeLayout;
//Defining Items .
TextView ProbTitle;
ImageButton ExpandButton;
TextView ProbDescr;
ImageButton ExpandNoButton;
ImageView CategoryPic;
/*
TextView Card_Star;
TextView Card_UnStar;
*/
TextView Card_Share;
//Referencing Resources
public MyRecycleViewHolder(final View itemView) {
super(itemView);
ProbTitle = (TextView) itemView.findViewById(R.id.prob_title);
CategoryPic = (ImageView) itemView.findViewById(R.id.cat_pic);
ProbDescr = (TextView) itemView.findViewById(R.id.prob_descr);
ExpandButton = (ImageButton) itemView.findViewById(R.id.expand_button);
ExpandNoButton = (ImageButton) itemView.findViewById(R.id.expand_no_button);
/*
Card_Star = (TextView) itemView.findViewById(R.id.card_star);
Card_UnStar = (TextView) itemView.findViewById(R.id.card_unstar);
*/
Card_Share = (TextView) itemView.findViewById(R.id.card_share);
swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe);
}
Proszę sprawdzić edytować swój sposób wygrał Działa, problem z uzyskaniem tego ciągu, tylko możliwy sposób pochodzi z adaptera, ale z tab_1.java nie jest to możliwe. – Jaeger
@AboHani RecyclerView nie udostępnia onItemClickListener i onItemLongClickListener, należy go ustawić tylko w adapterze ... lub można utworzyć interfejs w adapterze, taki jak ten "publiczny interfejs OnItemClickLitener { void onItemClick (Widok widoku, pozycja int); void onItemLongClick (Widok widok, pozycja int); } } i wywołaj go, gdy każdy element kliknął lub długo kliknął, dzięki czemu możesz ustawić detektora w tab_1.java teraz. – chichiangho
Tak, dodałem na początku w ten sposób, ale nie byłem w stanie przekazać danych, zresztą zrobiłem to przez odniesienie cardview w adapterze i przekazanie danych za pomocą intent.putExtras. btw, jeśli masz wiedzę w zakresie wyszukiwania, sprawdź moje pytanie w moim profilu i dziękuję za odpowiedź :). – Jaeger