-4

I want to make a interface which user can add its data to activity and after its must be show on in recyclerview, I used manual data adding in code it's working but I want to user must be able to store its data on application and can see & modified.

I used put_extra function but is not working.`

[code for put_put Extra]

Here is adapter class:

public class Handler_Adapter extends RecyclerView.Adapter<Handler_Adapter.MyViewHolders> {
    ArrayList<MyMode> myModel;
    View ReceivedImages;
    Context context;
    public Handler_Adapter (Context context, ArrayList<MyMode> list, View myImagesF){
       this.context=context;
        this.myModel=list;
        ReceivedImages=myImagesF;
    }

    @Override
    public MyViewHolders onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater= LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.row,parent,false);
        return null;
    }
@Override
public void onBindViewHolder(@NonNull MyViewHolders holder, int position) {
    holder.EName.setText(myModel.get(position).getLangName());
    holder.E_Des.setText(myModel.get(position).getLangName());
    holder.Price.setText(myModel.get(position).getLangName());
    holder.itemsSize.setText(myModel.get(position).getLangName());
    holder.myImages.setImageResource(myModel.get(position).getLangLogo());
    holder.rows.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

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

public class MyViewHolders extends RecyclerView.ViewHolder {
    TextView EName,E_Des,Price,itemsSize;
    ImageView myImages;
    RelativeLayout rows;
    public MyViewHolders(@NonNull View itemView) {
        super(itemView);
        EName=itemView.findViewById(R.id.EName);
        E_Des=itemView.findViewById(R.id.E_Des);
    ReceivedImages=itemView.findViewById(R.id.my_Imaage);
        Price=itemView.findViewById(R.id.E_Price);
        itemsSize=itemView.findViewById(R.id.itemsSize);
       rows=itemView.findViewById(R.id.rows);
    }
}

}

Here is UserActivity

public class AddMenu extends AppCompatActivity {
public static final String TEXT_TO_SEND="com.example.EMenu.TEXT_TO_SEND";
private ImageView mImageView;
private EditText EName,E_Des,E_Price,E_size;
private Button Import;
private String TextToSend;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_menu);



        mImageView=findViewById(R.id.imageFilterView);
        mImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ImagePicker.Companion.with(AddMenu.this)
                .crop()
               // .cropOval()
                        .compress(1024)
                        .maxResultSize(1080,1080)
                        .start();
            }
        });
    Import=findViewById(R.id.Import);
    EName=findViewById(R.id.EName);
    E_Des=findViewById(R.id.E_Des);
    E_Price=findViewById(R.id.E_Price);
    E_size=findViewById(R.id.E_size);
    Import.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             TextToSend=EName.toString().toUpperCase().trim();
             TextToSend=E_Des.toString().toLowerCase().trim();
             TextToSend=E_Price.toString().toUpperCase().trim();
             TextToSend=E_size.toString().toUpperCase().trim();
            gotoActivity();
        }
    });
}

private void gotoActivity() {
    Intent on=new Intent(AddMenu.this,Mainpage.class);
     on.putExtra("Selected_Image",R.id.imageFilterView);
       on.putExtra(TEXT_TO_SEND, String.valueOf(EName).toUpperCase());
       on.putExtra(TEXT_TO_SEND, String.valueOf(E_Des));
       on.putExtra(TEXT_TO_SEND, String.valueOf (E_Price).toUpperCase());
       on.putExtra(TEXT_TO_SEND, String.valueOf(E_size).toUpperCase());
    startActivity(on);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Uri uri=data.getData();
    mImageView.setImageURI(uri);
}

**Main page code_ at there is

used adding images manually but I want to its added it by user activity**

public class Mainpage extends AppCompatActivity {
    RecyclerView Recycler;
    ArrayList<MainModels> mainModel;
    MainAdapter mainAdapter;
    Handler_Adapter mHandler_adapter;
    ArrayList<MyMode> myModel;
    SearchView SearchView;
    ImageView mImageView,myImagesF;

    ////////////////////////////////////////////////////////: Images resource file..
    String s1[],s2[],s3[],s4[];

    /////////////////////////////////////////////////////.......... continue..............
    RecyclerView recyclerView;
    NavigationView click;
    private FirebaseAuth fAuth;
    private String currentUserId;
    private DatabaseReference databaseReference;
    Button Navigation;
    //Menu Account,Settings,Restaurant,Menu;
    private DrawerLayout mDrawerLayout;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mainpage);
        myModel = new ArrayList<>();
        int images[]={R.drawable.delfina_cocciardi_ndpbk_d_03m_unsplash,R.drawable.ic_launcher_foreground,
                R.drawable.ic_launcher_foreground,R.drawable.ic_launcher_foreground,R.drawable.ic_launcher_foreground    };
         /////////////////////////////////////.......Goat it data from input data fragment
    mImageView=findViewById(R.id.my_Imaage);
    Bundle bundle=getIntent().getExtras();
    if (bundle != null){
        int res_image=bundle.getInt("Selected_Image");

// mImageView.setImageResource(res_image);

    }
    //////////////////////////////////////////////////................!!!

    recyclerView=findViewById(R.id.recyclerView);
    Intent intent=getIntent();
    s1=getResources().getStringArray(R.array.Menu_items);
    s2=getResources().getStringArray(R.array.Description);
    s3=getResources().getStringArray(R.array.Prices);
    s4=getResources().getStringArray(R.array.Prices);
    Adapter mAdapter=new Adapter(this,s1,s2,s3,s4,images);
    recyclerView.setAdapter(mAdapter);
    recyclerView.setLayoutManager(new GridLayoutManager(this,2,RecyclerView.VERTICAL,false));


    /*
    recyclerView=findViewById(R.id.recyclerView);
    Integer[] langLogos={R.id.imageFilterView};

    Intent intent=getIntent();
    String langNames=intent.getStringExtra(AddMenu.TEXT_TO_SEND);
    if (langNames!=null){
        TextView textView=findViewById(R.id.Menu_Name);
        textView.setText(langNames);
    }

    String langPrice=intent.getStringExtra(AddMenu.TEXT_TO_SEND);
    if (langPrice!=null){
        TextView textView2=findViewById(R.id.Description_name);
        textView2.setText(langPrice);
    }
    String langDisc=intent.getStringExtra(AddMenu.TEXT_TO_SEND);
    if (langDisc!=null){
        TextView textView3=findViewById(R.id.Price);
        textView3.setText(langDisc);
    }
    String langSize=intent.getStringExtra(AddMenu.TEXT_TO_SEND);
    if (langSize!=null){
        TextView textView4=findViewById(R.id.itemsSize);
        textView4.setText(langSize);
    }

    myModel=new ArrayList<>();
    MyMode so=new MyMode(langLogos,langNames,langDisc,langPrice,langSize);
    myModel.add(so);
    GridLayoutManager gridLayoutManager= new GridLayoutManager(Mainpage.this,2,GridLayoutManager.VERTICAL,false);
    recyclerView.setLayoutManager(gridLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    mHandler_adapter=new Handler_Adapter(Mainpage.this,myModel,myImagesF);
    recyclerView.setAdapter(mHandler_adapter);


     */
   // for (int j=0;j<langLogos.length;j++){
  //  }
Azami
  • 1
  • 4
  • To show any kind of data in a recycler view you need to implement your own RecyclerView.Adapter. – rxabin Mar 23 '22 at 13:48
  • You mean it’s can’t be possible to put data from user interface? – Azami Mar 23 '22 at 14:01
  • I have also adapter it’s working but I want it get data from another activity – Azami Mar 23 '22 at 14:02
  • Is there is any way? – Azami Mar 23 '22 at 14:02
  • You could get the user input from an activity by using Intent.putExtra() then get that data on another activity with getIntent.getExtra() and then feed your adapter with that data, but that has nothing to do with the question you asked. Could you be more clear? What's the problem? – rxabin Mar 23 '22 at 14:08
  • Can you share your adapter class and activity where recycler view is initialized. – mohammed ahmed Mar 23 '22 at 14:27
  • You can achieve this functionality by linking your recycler to activity's instance of list. This will allow you to modify list contents from the activity. Calling the updateDataSet() on the adopter will update changes in your recycler view. – mohammed ahmed Mar 23 '22 at 14:36
  • @rxabin I used getExtra but it’s not working I have shared it’s image could you please check it. – Azami Mar 23 '22 at 15:23
  • The image is not accessable. :d – mohammed ahmed Mar 23 '22 at 15:41
  • https://i.stack.imgur.com/rQ4Uo.png – Azami Mar 23 '22 at 15:56

1 Answers1

0

Here is what you can do. Create a private list in your activity.

    @Override
    protected void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);
        myModel = new ArrayList<>();
    }

Now change the constructor of your adapter.

 public Handler_Adapter(Context context, ArrayList<MyModels> list, ...) 
 {
  ...
  this.myModelList = list;
  ...
  }

Now when you modify "myModel" than this is visible to your adapter. All you have to do is to call the following once you modify it.

mHandlerAdapter.notifyDataSetChanged();
mohammed ahmed
  • 195
  • 1
  • 10
  • java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference – Azami Mar 24 '22 at 10:27
  • its giving this error! – Azami Mar 24 '22 at 10:27
  • Share the implementation of adapter and activity. Otherwise I would not be able to pin point the issue. – mohammed ahmed Mar 24 '22 at 10:53
  • Please see the codes – Azami Mar 24 '22 at 13:57
  • @Azami Please don't share the commented code. It gets confusing. Secondly you are not using Handler_Adapter class. (Code is commented). Also you are not modifying data that is passed to constructor of "Adapter". "Info". You are replacing values of TEXT_TO_SEND and TextToSend in UserActivity – mohammed ahmed Mar 25 '22 at 09:00
  • I commented to for showing the exact code, could please tell me what should I do or can you share a simple code to pass data from an activity to a recyclerview – Azami Mar 26 '22 at 06:58
  • Could you help me? – Azami Mar 27 '22 at 05:15
  • Can someone help me? – Azami Mar 31 '22 at 05:55