user8618145
user8618145

Reputation:

listview is not refreshing in fragment after dismiss custom dialog box?

Can anybody solve my ListView not refreshing after dissmissing a dialog box?

This is my Fragment. I set adapter and ListView.

public class About extends Fragment {

MyRatingAdapter myRatingAdapter;
ListView listView;
List<ReviewRatingBean> reviewratinglist = new ArrayList<>();
Button buttonsubmit;
EditText editText_name, editText_text;
RatingBar ratingBar;
DataBaseHandler dataBaseHandler;
Button btn_add_reviews;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable final Bundle savedInstanceState) {
    //returning our layout file
    //change R.layout.yourlayoutfilename for each of your fragments
    View view = inflater.inflate(R.layout.about_fragment, container, false);
    //  ratingbar1=(RatingBar)view.findViewById(R.id.ratingBar1);
    // button=(Button)view.findViewById(R.id.button1);
    dataBaseHandler = new DataBaseHandler(getActivity());
    listView = (ListView) view.findViewById(R.id.list_item);
    reviewratinglist = dataBaseHandler.GetAllData();
    myRatingAdapter = new MyRatingAdapter(getActivity(),  reviewratinglist);

    listView.setAdapter(myRatingAdapter);

    btn_add_reviews = (Button)view.findViewById(R.id.btn_addreviews);
    btn_add_reviews.setOnClickListener(new View.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
        @Override
        public void onClick(View view) {
            LayoutInflater inflater = getLayoutInflater(savedInstanceState);
            View dialoglayout = inflater.inflate(R.layout.activity_review_rating, null);
            AlertDialog.Builder  builder = new AlertDialog.Builder(getActivity());
            builder.setView(dialoglayout);
            final AlertDialog alertDialog = builder.create();
            buttonsubmit = (Button)dialoglayout.findViewById(R.id.btn_submit);
            editText_name = (EditText)dialoglayout.findViewById(R.id.et_name);
            editText_text = (EditText)dialoglayout.findViewById(R.id.et_text);
            ratingBar = (RatingBar)dialoglayout.findViewById(R.id.rating_bar);
            ratingBar.setIsIndicator(false);

            buttonsubmit.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {

                    ReviewRatingBean reviewRatingBean = new ReviewRatingBean();
                    String name = editText_name.getText().toString();
                    float rate = ratingBar.getRating();
                    String text = editText_text.getText().toString();

                    reviewRatingBean.setName(name);
                    reviewRatingBean.setRating(rate);
                    reviewRatingBean.setTextreview(text);

                    dataBaseHandler.addData(reviewRatingBean);

                    Toast.makeText(getContext(), "Thanks For Your FeedBack", Toast.LENGTH_SHORT).show();

                    myRatingAdapter.notifyDataSetChanged(); here i have try to notify the base adpater to refreshing a list view
                    listView.setAdapter(myRatingAdapter);

                    alertDialog.dismiss();
                }
            });

           alertDialog.show();
        }

    });

     return view;
}
}

Upvotes: 0

Views: 143

Answers (3)

fweigl
fweigl

Reputation: 22018

You never give the adapter any new data. Something like

reviewratinglist = dataBaseHandler.GetAllData();
myReviewAdapter.setReviewRatings(reviewRatingList); 

in your onClick() should do the trick.

Upvotes: 1

Jai
Jai

Reputation: 486

Don't Use again Adapter class just add this bellow

@Override
            public void onClick(View view) {

                ReviewRatingBean reviewRatingBean = new ReviewRatingBean();
                String name = editText_name.getText().toString();
                float rate = ratingBar.getRating();
                String text = editText_text.getText().toString();

                reviewRatingBean.setName(name);
                reviewRatingBean.setRating(rate);
                reviewRatingBean.setTextreview(text);

                dataBaseHandler.addData(reviewRatingBean);

                Toast.makeText(getContext(), "Thanks For Your FeedBack", Toast.LENGTH_SHORT).show();


                dataBaseHandler.GetAllData();  // Add this line


                myRatingAdapter.notifyDataSetChanged(); // just use notifiydataset only

                alertDialog.dismiss();
            }
        });

Upvotes: 1

Bhuvanesh BS
Bhuvanesh BS

Reputation: 13617

In your dialog onClick() you have just saved the changes to the database, but not updated with your adapter data.

Your dialog onClick() should be like this:

                @Override
                public void onClick(View view) {

                    ReviewRatingBean reviewRatingBean = new ReviewRatingBean();
                    String name = editText_name.getText().toString();
                    float rate = ratingBar.getRating();
                    String text = editText_text.getText().toString();

                    reviewRatingBean.setName(name);
                    reviewRatingBean.setRating(rate);
                    reviewRatingBean.setTextreview(text);

                    dataBaseHandler.addData(reviewRatingBean);

                    Toast.makeText(getContext(), "Thanks For Your FeedBack", Toast.LENGTH_SHORT).show();

                    reviewratinglist.add(reviewRatingBean)  // add this line

                    myRatingAdapter.notifyDataSetChanged(); here i have try to notify the base adpater to refreshing a list view
                    listView.setAdapter(myRatingAdapter);

                    alertDialog.dismiss();
                }
            });

Upvotes: 0

Related Questions