2017-06-13 81 views
1

我有活動,並且此活動是可繪製的菜單。 裏面的drawable,我包括一些片段,在我的片段中,我用適配器顯示一些數據。當數據被點擊時,我嘗試做出行動,然後它會去其他片段。哦,是的,我嘗試從我的適配器發送一些值到片段。 請幫我無法從適配器轉到片段

這是我的適配器..

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(); 
} 



} 

而且這是我的片段

package com.skripsi.anna; 

import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


public class MenuEdit extends Fragment { 


private String idMenu,namaMenu,hargaMenu; 

private OnFragmentInteractionListener mListener; 

public MenuEdit() { 
} 
public static MenuEdit newInstance(String idMenu, String namaMenu, String hargaMenu) { 
    MenuEdit fragment = new MenuEdit(); 
    Bundle args = new Bundle(); 
    args.putString("idMenu", idMenu); 
    args.putString("namaMenu", namaMenu); 
    args.putString("hargaMenu",hargaMenu); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     idMenu = getArguments().getString("idMenu"); 
     namaMenu = getArguments().getString("namaMenu"); 
     hargaMenu = getArguments().getString("hargaMenu"); 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_menu_edit, container, false); 


    return view; 
} 

public void onButtonPressed(Uri uri) { 
    if (mListener != null) { 
     mListener.onFragmentInteraction(uri); 
    } 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof OnFragmentInteractionListener) { 
     mListener = (OnFragmentInteractionListener) context; 
    } else { 
     throw new RuntimeException(context.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 
public interface OnFragmentInteractionListener { 
    void onFragmentInteraction(Uri uri); 
} 
} 

我有嘗試這個

FragmentTransaction ft = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction(); 

,但它使我的應用FC 並且它不工作

+0

也請發佈應用崩潰後logcat的錯誤。 – DaveNOTDavid

回答

1

我使用此代碼,我希望爲你工作

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){ 

    } 
} 
+0

我必須把這個代碼@peyman –

+0

@GandhiWibowo在你的活動中... –

+0

並在你的片段中寫下這個... your_activity =(YourActivity)getActivity(); your_activity.addFragment(新的MenuEdit(),false,「MENU_EDIT_FRAGMENT」); –

0

[解決]

我嘗試把這個代碼我的適配器

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(); 
} 



}