-1

Я разрабатываю приложение для отображения изображений и текста. При нажатии на элемент он переходит к другому фрагменту. Отображение списка правильное, но когда я нажимаю на элемент, он не переходит к фрагменту. Я использую адаптер recycler для перечисления элементов. Код показан ниже.Андроид передающий переход к фрагменту

public class MyRecyclerAdapter extends RecyclerView.Adapter <MyRecyclerAdapter.MyViewHolder> { 

String categoryId; 

private List <NewsFeeds> feedsList; 
private Context context; 
private LayoutInflater inflater; 

public MyRecyclerAdapter(Context context, List <NewsFeeds> feedsList) { 

    this.context = context; 
    this.feedsList = feedsList; 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

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

    View rootView = inflater.inflate(R.layout.singleitem_recyclerview_categories, parent, false); 
    return new MyViewHolder(rootView); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
    NewsFeeds feeds = feedsList.get(position); 
    //Pass the values of feeds object to Views 
    holder.title.setText(feeds.getName()); 
    //holder.categoryId.setText(feeds.getCategory_id()); 
    categoryId = feeds.getCategory_id(); 
    Log.d("LOGTAG", "id : " + categoryId); 
    holder.imageview.setImageUrl(feeds.getImgURL(), NetworkController.getInstance(context).getImageLoader()); 

    Log.d("LOGTAG", "feeds.getFeedName():" + feeds.getName()); 
} 

@Override 
public int getItemCount() { 
    return feedsList.size(); 
} 

public class MyViewHolder extends RecyclerView.ViewHolder { 

    private TextView title; 
    private NetworkImageView imageview; 
    private CardView cardView; 


    public MyViewHolder(View itemView) { 
    super(itemView); 
    title = (TextView) itemView.findViewById(R.id.title_view); 
    //categoryId = (TextView) itemView.findViewById(R.id.content_view); 
    // Volley's NetworkImageView which will load Image from URL 
    imageview = (NetworkImageView) itemView.findViewById(R.id.thumbnail); 
    cardView = (CardView) itemView.findViewById(R.id.card_view); 

    cardView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    //Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show(); 



    // I want to send values to SubCategoryFragment and start SubCategoryFragment 
    Bundle args = new Bundle(); 
    args.putString("category_id", categoryId); 
    //set Fragmentclass Arguments 
    SubCategoryFragment fragobj = new SubCategoryFragment(); 
    fragobj.setArguments(args); 

    Log.d("LOGTAG", categoryId); 
    Log.d("LOGTAG", "clicked"); 



    //newInstance(categoryId); 



    } 
    }); 




    } 


} 


} 

Я хочу отправить значение SubCategoryFragment и запустить SubCategoryFragment.

мой SubCategoryFragment код

public class SubCategoryFragment extends Fragment { 

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

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


} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_sub_category, container, false); 
    //Bundle bundle = this.getArguments(); 


    Bundle args = getArguments(); 
    //String categoryId = args.getString("index"); 

    String categoryId = getArguments().getString("category_id"); 
    //String categoryId = getArguments().getString("category_id"); 
    TextView textView = (TextView) rootView.findViewById(R.id.label); 
    textView.setText(categoryId); 



    // Inflate the layout for this fragment 
    return rootView; 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
} 
} 

Пожалуйста, помогите мне

ответ

2

В вашем onClickListener();

Fragment fragment = new tasks(); 
FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.content_frame, fragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

Изменение R.id.content_frame с фрагментом

+0

Это показывает две ошибки не могут решить и не может решить getactivity –

+0

@faziltm вы пытались с помощью getContext() или getApplicationContext() вместо getActivity()? –

+0

Я попытался использовать getContext() или getApplicationContext() вместо getActivity(). Но он показывает, что не может решить задачи() и не может разрешить getApplicationContext() –

1

С адаптером для отправки данных с целью как:

Fragment fragment = new tasks(); 
FragmentManager fragmentManager = context.getSupportFragmentManager(); // this is basically context of the class 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
Bundle bundle=new Bundle(); 
bundle.putString("name", "From Adapter"); //key and value 
//set Fragmentclass Arguments 
fragment.setArguments(bundle); 
fragmentTransaction.replace(R.id.content_frame, fragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

и фрагмента методом onCreateView:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
    String strtext=getArguments().getString("name"); //fetching value by key 
    return inflater.inflate(R.layout.fragment, container, false); 
} 
+0

. Он показывает, что две ошибки не могут решить и не могут решить getactivity. –

+0

Показывает, что невозможно решить задачи и getSupportFragmentManager. Помогите мне. –

0

Вы сделали одну ошибку в методе onClick.

Если вы хотите переместить один фрагмент в другой фрагмент, вы должны обработать фрагмент с помощью FragmentTransaction.class Проверьте ниже код.

Edit:

SecondFragment fragment = new SecondFragment(); 
    FragmentManager fragmentManager = currentfragment.getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.add(R.id.content_frame, fragment); 
     fragmentTransaction.hide(currentfragment) fragmentTransaction.addToBackStack(currentfragment.getclass().getsimplename()); 
      fragmentTransaction.commit(); 

Edit:

Просто поместите ниже кода в методе RecyclerViewAdapter onBindViewHolder.

holder.cardView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show(); 
      // I want to send values to SubCategoryFragment and start SubCategoryFragment 
      Bundle args = new Bundle(); 
      args.putString("category_id", categoryId); 
      //set Fragmentclass Arguments 
      SubCategoryFragment fragobj = new SubCategoryFragment(); 
      fragobj.setArguments(args); 
      FragmentManager fragmentManager = currentfragment.getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.add(R.id.content_frame, fragobj); 
      fragmentTransaction.hide(currentfragment); 
     fragmentTransaction.addToBackStack(currentfragment.getclass().getsimplename()); 
      fragmentTransaction.commit(); 


      //newInstance(categoryId); 



     } 
    }); 

EDIT:

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> { 

    String categoryId; 

    private List<NewsFeeds> feedsList; 
    private Context context; 
    private LayoutInflater inflater; 
    private Fragment currentFragment; 

    public MyRecyclerAdapter(Context context, List<NewsFeeds> feedsList, final Fragment currentFragment) { 

     this.context = context; 
     this.feedsList = feedsList; 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.currentFragment = currentFragment; 
    } 

    @Override 
    public MyRecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View rootView = inflater.inflate(R.layout.singleitem_recyclerview_categories, parent, false); 
     return new MyViewHolder(rootView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     NewsFeeds feeds = feedsList.get(position); 
     //Pass the values of feeds object to Views 
     holder.title.setText(feeds.getName()); 
     //holder.categoryId.setText(feeds.getCategory_id()); 


     holder.title.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show(); 
       // I want to send values to SubCategoryFragment and start SubCategoryFragment 
       Bundle args = new Bundle(); 
       args.putString("category_id", categoryId); 
       //set Fragmentclass Arguments 
       SubCategoryFragment fragobj = new SubCategoryFragment(); 
       fragobj.setArguments(args); 
       FragmentManager fragmentManager = currentfragment.getFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.add(R.id.content_frame, fragobj); 
       fragmentTransaction.hide(currentfragment); 
       fragmentTransaction.addToBackStack(currentfragment.getclass().getsimplename()); 
       fragmentTransaction.commit(); 


       //newInstance(categoryId); 


      } 
     }); 

    } 

    @Override 
    public int getItemCount() { 
     return feedsList.size(); 
    } 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     private TextView title; 

     public MyViewHolder(View itemView) { 
      super(itemView); 
      title = (TextView) itemView.findViewById(R.id.title_view); 
     } 


    } 


} 
+0

Это показывает, что не удается разрешить получение активности. –

+0

Да, потому что вы закодировали адаптер, чтобы передать объект фрагмента в своем адаптере. У меня есть обновление моего сообщения, проверьте его –

+0

Используется ли он в режиме onclick в RecyclerAdapter ?. когда я использовал RecyclerAdapter onClick, он показывает три ошибки. 1. Нестационарный метод getFragmentManager не может ссылаться на статический контекст. 2.выражение исключено в фрагментеTransaction.hide (CategoriesFragment). 3. Невозможно разрешить метод getclass() –

0

Замените OnClick слушателя с этим.

cardView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    //Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show(); 



    // I want to send values to SubCategoryFragment and start SubCategoryFragment 
    Bundle args = new Bundle(); 
    args.putString("category_id", categoryId); 
    //set Fragmentclass Arguments 
    SubCategoryFragment fragobj = new SubCategoryFragment(); 
    fragobj.setArguments(args); 

    Log.d("LOGTAG", categoryId); 
    Log.d("LOGTAG", "clicked"); 
    //put this in your code 
FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction =   fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.SubCategoryFragment, fragobj); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 


    //newInstance(categoryId); 



    } 
    });  
+0

Существует только одна ошибка Не удается разрешить метод getActivity() –

+0

Существует только одна ошибка :: Невозможно разрешить метод getActivity() ' –

 Смежные вопросы

  • Нет связанных вопросов^_^