Java 无法从适配器转到片段
我有活动,这个活动是可绘制的菜单。 在drawable中,我包含了一些片段,在片段中我用适配器显示了一些数据。我尝试在单击数据时执行操作,然后它将转到其他片段。哦,是的,我试着从适配器发送一些值到片段。 请帮帮我 这是我的适配器Java 无法从适配器转到片段,java,android,android-fragments,Java,Android,Android Fragments,我有活动,这个活动是可绘制的菜单。 在drawable中,我包含了一些片段,在片段中我用适配器显示了一些数据。我尝试在单击数据时执行操作,然后它将转到其他片段。哦,是的,我试着从适配器发送一些值到片段。 请帮帮我 这是我的适配器 package com.skripsi.anna.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.L
package com.skripsi.anna.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.skripsi.anna.MenuEdit;
import com.skripsi.anna.R;
import com.skripsi.anna.model.ModelMenu;
import java.util.List;
/**
* Created by gandhi on 6/11/17.
*/
public class BarangEditor extends RecyclerView.Adapter<BarangEditor.ViewHolder> {
private List<ModelMenu> modelMenus;
private Context context;
public BarangEditor(List<ModelMenu> modelMenus){
this.modelMenus = modelMenus;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView namaBarang,hargaBarang;
public ViewHolder(View v) {
super(v);
namaBarang = (TextView) v.findViewById(R.id.nama_barang);
hargaBarang = (TextView) v.findViewById(R.id.harga);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
ModelMenu modelMenu = modelMenus.get(position);
MenuEdit menuEdit = new MenuEdit();
menuEdit.newInstance(modelMenu.getIdMenu(),modelMenu.getNamaMenu(),modelMenu.getHargaMenu());
// i want to send this value to fragment
}
});
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_barang_editor, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
ModelMenu modelMenu = modelMenus.get(position);
holder.hargaBarang.setText(modelMenu.getHargaMenu());
holder.namaBarang.setText(modelMenu.getNamaMenu());
}
@Override
public int getItemCount() {
return modelMenus.size();
}
}
我试过这个
FragmentTransaction ft = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction();
但它使我的应用程序成为FC
这是行不通的我使用这个代码,我希望能为你工作
public void addFragment(Fragment fragment, boolean addToBackStack, String tag)
{
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
if (addToBackStack)
{
ft.addToBackStack(tag);
}
ft.replace(R.id.content_frame, fragment, tag);
try{
ft.commitAllowingStateLoss();
}catch (Exception e){
}
}
[已解决]
我尝试将此代码放在适配器上
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, menuEdit).commit();
但它说无法解决getSupportFragment
所以这才是真正的问题,为了解决这个问题,我写了一些这样的代码
AppCompatActivity activity = (AppCompatActivity) v.getContext();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.flContent, menuEdit).addToBackStack(null).commit();
及其工作
它现在是我的完整适配器
package com.skripsi.anna.adapter;
import android.os.Bundle;
import android.support.v4.app.FragmentController;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.skripsi.anna.MenuEdit;
import com.skripsi.anna.R;
import com.skripsi.anna.model.ModelMenu;
import java.util.List;
/**
* Created by gandhi on 6/11/17.
*/
public class BarangEditor extends RecyclerView.Adapter<BarangEditor.ViewHolder> {
private List<ModelMenu> modelMenus;
public BarangEditor(List<ModelMenu> modelMenus){
this.modelMenus = modelMenus;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView namaBarang,hargaBarang;
public ViewHolder(View v) {
super(v);
namaBarang = (TextView) v.findViewById(R.id.nama_barang);
hargaBarang = (TextView) v.findViewById(R.id.harga);
v.setOnClickListener(new View.OnClickListener() {
public FragmentController appCompatActivity;
@Override
public void onClick(View v) {
int position = getAdapterPosition();
ModelMenu modelMenu = modelMenus.get(position);
MenuEdit menuEdit = new MenuEdit();
Bundle bundle = new Bundle();
bundle.putString("idMenu",modelMenu.getIdMenu());
menuEdit.setArguments(bundle);
AppCompatActivity activity = (AppCompatActivity) v.getContext();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.flContent, menuEdit).addToBackStack(null).commit();
}
});
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_barang_editor, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
ModelMenu modelMenu = modelMenus.get(position);
holder.hargaBarang.setText(modelMenu.getHargaMenu());
holder.namaBarang.setText(modelMenu.getNamaMenu());
}
@Override
public int getItemCount() {
return modelMenus.size();
}
}
package com.skripsi.anna.adapter;
导入android.os.Bundle;
导入android.support.v4.app.FragmentController;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入com.skripsi.anna.MenuEdit;
导入com.skripsi.anna.R;
导入com.skripsi.anna.model.model菜单;
导入java.util.List;
/**
*由甘地于2017年6月11日创作。
*/
公共类BarangEditor扩展了RecyclerView.Adapter{
私有列表菜单;
公共工具栏编辑器(列表模式菜单){
this.modelmones=modelmones;
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图namaBarang,hargaBarang;
公共视图持有者(视图v){
超级(五);
namaBarang=(文本视图)v.findViewById(R.id.nama_barang);
哈格巴朗=(文本视图)v.findviewbyd(R.id.harga);
v、 setOnClickListener(新视图。OnClickListener(){
公共碎片活动;
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
ModelMenu ModelMenu=modelMenus.get(位置);
MenuEdit MenuEdit=新建MenuEdit();
Bundle=新Bundle();
bundle.putString(“idMenu”,modelMenu.getIdMenu());
menuEdit.setArguments(bundle);
AppCompatActivity活动=(AppCompatActivity)v.getContext();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.flContent,menuEdit).addToBackStack(null.commit();
}
});
}
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.item\u barang\u编辑器,parent,false);
视窗支架vh=新视窗支架(v);
返回vh;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
ModelMenu ModelMenu=modelMenus.get(位置);
holder.hargaBarang.setText(modelMenu.getHargaMenu());
holder.namaBarang.setText(modelMenu.getNamaMenu());
}
@凌驾
public int getItemCount(){
返回modelmones.size();
}
}
请在应用程序崩溃后发布logcat错误。并在您的片段中写入以下内容。。。你的活动=(你的活动)getActivity();您的_activity.addFragment(new MenuEdit(),false,“菜单编辑_片段”);我已经尝试过了,但我将第一个代码放在我的活动中,将第二个代码放在我的recycleview适配器中,它的“不做任何事情”,然后我尝试将.commit()添加到第一个代码中,它的FC并显示此错误java.lang.IllegalStateException:活动已被销毁您可以尝试将第一个代码放在片段或适配器中吗?
package com.skripsi.anna.adapter;
import android.os.Bundle;
import android.support.v4.app.FragmentController;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.skripsi.anna.MenuEdit;
import com.skripsi.anna.R;
import com.skripsi.anna.model.ModelMenu;
import java.util.List;
/**
* Created by gandhi on 6/11/17.
*/
public class BarangEditor extends RecyclerView.Adapter<BarangEditor.ViewHolder> {
private List<ModelMenu> modelMenus;
public BarangEditor(List<ModelMenu> modelMenus){
this.modelMenus = modelMenus;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView namaBarang,hargaBarang;
public ViewHolder(View v) {
super(v);
namaBarang = (TextView) v.findViewById(R.id.nama_barang);
hargaBarang = (TextView) v.findViewById(R.id.harga);
v.setOnClickListener(new View.OnClickListener() {
public FragmentController appCompatActivity;
@Override
public void onClick(View v) {
int position = getAdapterPosition();
ModelMenu modelMenu = modelMenus.get(position);
MenuEdit menuEdit = new MenuEdit();
Bundle bundle = new Bundle();
bundle.putString("idMenu",modelMenu.getIdMenu());
menuEdit.setArguments(bundle);
AppCompatActivity activity = (AppCompatActivity) v.getContext();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.flContent, menuEdit).addToBackStack(null).commit();
}
});
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_barang_editor, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
ModelMenu modelMenu = modelMenus.get(position);
holder.hargaBarang.setText(modelMenu.getHargaMenu());
holder.namaBarang.setText(modelMenu.getNamaMenu());
}
@Override
public int getItemCount() {
return modelMenus.size();
}
}