passing string variable from recyclerview to fragment

Viewed 141

i try to get the name of the movies which are in recycler view n store in variable 'name' but how do i pass in to dictionary fragment n set it on definitionn(edittext). i tried with this code but it shows empty i try to get the name of the movies which are in recycler view n store in variable 'name' but how do i pass in to dictionary fragment n set it on definitionn(edittext). i tried with this code but it shows empty

import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;




// item of recyclerview was not visible until included  
app:layoutManager="android.support.v7.widget.LinearLayoutManager">

public class MainActivity extends AppCompatActivity   {

RecyclerView recyclerView;
RecyclerAdapter recyclerAdapter;

List<String> moviesList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    moviesList = new ArrayList<>();

    recyclerView = findViewById(R.id.recyclerView);
    recyclerAdapter = new RecyclerAdapter(moviesList);


    recyclerView.setAdapter(recyclerAdapter);

    DividerItemDecoration dividerItemDecoration = new 
    DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
    recyclerView.addItemDecoration(dividerItemDecoration);


    moviesList.add("IronMan");
    moviesList.add("The Incredible Hulk");
    moviesList.add("Iron Man 2");
    moviesList.add("Thor");
    moviesList.add("Captain America: The First Avenger");
    moviesList.add("The Avengers");
    moviesList.add("Iron Man 3");
    moviesList.add("Thor: The Dark World");
    moviesList.add("Captain America: The Winter Soldier");
    moviesList.add("Guardians of the Galaxy");
    moviesList.add("Avengers: Age of Ultron");
    moviesList.add("Ant-Man");
    moviesList.add("Captain America: Civil War");
    moviesList.add("Doctor Strange");
    moviesList.add("Guardians of the Galaxy Vol. 2");
    moviesList.add("Spider-Man: Homecoming");
    moviesList.add("Thor: Ragnarok");
    moviesList.add("Black Panther");
    moviesList.add("Avengers: Infinity War");
    moviesList.add("Ant-Man and the Wasp");
    moviesList.add("Captain Marvel");
    moviesList.add("Avengers: Endgame");
    moviesList.add("Spider-Man: Far From Home");
    }


}



import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
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.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

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

String name="";

private static final String TAG = "RecyclerAdapter";
List<String> moviesList;

public RecyclerAdapter(List<String> moviesList) {
    this.moviesList = moviesList;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int 
viewType) {
    LayoutInflater layoutInflater = 
LayoutInflater.from(parent.getContext());
    View view = layoutInflater.inflate(R.layout.row_item, parent, 
false);
    ViewHolder viewHolder = new ViewHolder(view);


    return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int 
position) {
    holder.rowCountTextView.setText(String.valueOf(position));
    holder.textView.setText(moviesList.get(position));
}

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

class ViewHolder extends RecyclerView.ViewHolder implements 
View.OnClickListener {

    ImageView imageView;
    TextView textView, rowCountTextView;

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

        imageView = itemView.findViewById(R.id.imageView);
        textView = itemView.findViewById(R.id.textView);
        rowCountTextView = 
itemView.findViewById(R.id.rowCountTextView);

        itemView.setOnClickListener(this);

        itemView.setOnLongClickListener(new 
View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                moviesList.remove(getAdapterPosition());
                notifyItemRemoved(getAdapterPosition());
                return true;
            }
        });

    }

        @Override
        public void onClick(View view) {
        name=moviesList.get(getAdapterPosition()).toString();
        AppCompatActivity activity=(AppCompatActivity) 
        view.getContext();
        Fragment myfragment = new Dictionary();

activity.getSupportFragmentManager().beginTransaction().
replace(R.id.activitymain,myfragment).addToBackStack(null).commit();




       }
    }
}



import android.os.Bundle;
import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;



public class Dictionary extends Fragment {




public EditText definitionnn;

public Dictionary() {

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_dictionary, container, false);
    definitionnn = (EditText) v.findViewById(R.id.definition);
    RecyclerAdapter recycle = new RecyclerAdapter(null);
    String word = recycle.name;



    return v;


}



@Override
public void onStart() {
    super.onStart();
    RecyclerAdapter recycle = new RecyclerAdapter(null);
    String word = recycle.name;
    definitionnn.setText(word);
}


}
1 Answers

The problem is that in your OnClick() Method you create and add the new Dictionary Fragment without passing the value you want. Something like this would be your solution.

In your RecyclerAdapter class:

Bundle bundle = new Bundle();
bundle.putString(yourVariable, "word");
Fragment fragment = new Dictionary();
fragobj.setArguments(bundle);
activity.getSupportFragmentManager().beginTransaction().
replace(R.id.activitymain,fragment).addToBackStack(null).commit();

And in your Dictionary Fragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_dictionary, container, false);
    String word = getArguments().getString("word"); 
    definitionnn = (EditText) v.findViewById(R.id.definition)
    definitionnn.setText(word);
    return v;
}
Related