2017-03-16 5 views
-2

Es tut uns fragen, die wiederholte Frage fragmentieren, aber nach anderen Frage überprüft i verwenden, um ihre Antwort Sie sind nicht in meinem Code arbeiten: Ich bin auf AndroidPassing Daten an eine Aktivität

Hier ist die Klasse, wo ich will gehen die Daten

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> { 


    private int[] mdataset; 
    private String[] mplanet; 

    Context c; 
    public MainAdapter(Context context ,int[] dataset , String[] planet){ 

     this.c = context; 
     this.mplanet = planet; 
     this.mdataset = dataset; 

    } 

    @Override 
    public void onBindViewHolder(MainAdapter.ViewHolder holder, final int position) { 
     holder.image.setImageResource(mdataset[position]); 
     holder.textView.setText(mplanet[position]); 

     holder.image.setOnClickListener(new View.OnClickListener() { 
      @Override 

      public void onClick(View v) { 


     // here is my i want to pass the data position to another fragment** 


       Bundle bundle = new Bundle(); 
       bundle.putInt("position", position); 
       bottomActivity fragment = new bottomActivity(); 
       fragment.setArguments(bundle); 

      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return mdataset.length; 
    } 




    public class ViewHolder extends RecyclerView.ViewHolder { 

     ImageView image; 
     TextView textView; 

     public ViewHolder(View itemView) { 
      super(itemView); 

      image = (ImageView) itemView.findViewById(R.id.imageView); 
      textView = (TextView)itemView.findViewById(R.id.textView); 

     } 
    } 


    @Override 
    public MainAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 


      View v = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.single_row, null); 

     ViewHolder vh = new ViewHolder(v); 
     return vh; 
    } 

} 

Hier ist meine Fragment Klasse, wo ich die Daten empfangen möchten

public class bottomActivity extends Fragment 
{ 

    TextView textView; 
    int pos; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_bottom, container, false); 

     textView = (TextView)view.findViewById(R.id.title_textView); 

     textView.setText(pos+""); 
     return view; 
    } 

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


// here is that code where the data should received 

     Bundle bundle = bottomActivity.this.getArguments(); 

     if (bundle != null) 
     { 

      pos = bundle.getInt("position", 2); 

     } 

    } 
} 
+1

Sie haben kein Fragment in onclick hinzugefügt oder ersetzt, Sie binden nur das Bundle an das Fragment –

+0

können Sie mehr Details erklären Ich habe nicht viel Knowleage in diesem –

+0

sagen Sie mir, was soll ich tun –

Antwort

1
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_bottom, container, false); 

     textView = (TextView)view.findViewById(R.id.title_textView); 
     // get data from the bundle you sent 
     int position=getArguments().getInt("position"); 

     textView.setText(position+""); 
     return view; 
    } 

In Ihrem onCreatView des Fragments tun wie dieser

+0

Sie verkürzen den Code nicht lösen meine Problem –

+0

post den Code, wo Sie das Fragment committen und den Code, wo Sie die Ansicht für das Fragment erstellen, mit dem ich denke, ich werde besser verstehen, was Ihr Problem ist, eigentlich – warlock

+0

Sie meine xml-Datei –

0

Der beste Weg, statische Methode newInstance in Fragmente zu haben ist, und alle Daten, die Sie wie parametars benötigen senden. Nächster Schritt ist onCreate-Methode in Fragment erhalten alle Daten, die Sie übergeben.

beispiels

Aktivität

YourFragment fragment = YourFragment.newInstance(10, 4); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.add(id, fragment).commit(); 

Fragment

int data1, data2; 
public static YourFragment newInstance(int data1, int data2) { 
    YourFragment fragment = new YourFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("data1", data1); 
    args.putInt("data2", data2); 
    fragment.setArguments(args); 
    return fragment; 
} 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    data1 = getArguments().getInt("data1", 0); 
    data2 = getArguments().getInt("data2", 0); 

    super.onCreate(savedInstanceState); 
} 

Ich glaube, Sie diesen Fall brauchen, das Senden von Daten vor dem Fragment erstellt wird.

Prost :)

+0

das Problem ist getFragmentManager ist showing error wenn ich das nutze das kann es nicht lösen –

+0

Hast du es mit getSupportFragmentManager() versucht? –

+0

ja, aber dann funktioniert auch nicht mit dem gleichen Fehler –

0

Verwenden Sie diese in Ihrer onClick Methode in Adapterklasse

public void onClick(View v) { 
    Bundle bundle = new Bundle(); 
    bundle.putInt("position", position);   
    bottomActivity fragment = new bottomActivity(); 
    fragment.setArguments(bundle); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.add(CONTENT_VIEW_ID, fragment).commit(); 
    } 

wo CONTENT_VIEW_ID den Behälter, die in Ihrer Aktivitätsklasse in

dann in bottomActivity Fragmente Klasse definiert werden sollen onCreateView

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_bottom, container,   false); 
     Bundle bundle = this.getArguments(); 
     if (bundle != null) 
     { 
      pos = bundle.getInt("position", 2); 
     } 
     textView = (TextView)view.findViewById(R.id.title_textView); 
     textView.setText(pos+""); 
     return view; 
    } 
+0

Sie bedeutet, ich muss View.OnClickListener implementieren und implementieren, dass onClick-Methode –

+0

getFragmentManager ist in Fehler Mark sagt, dass "kann es nicht lösen" –

Verwandte Themen