Java Android Refresh RecyclerView内置自定义适配器
我有一个使用自定义适配器的回收器视图。我在自定义适配器上有一个按钮,可以在单击时从数据库中删除一行。这很好,但我现在希望视图从服务器更新,并向用户显示他们删除的行。我将在下面发布的代码没有给出任何错误,但没有正确刷新。我将附加我的类以及适配器。谢谢 JavaJava Android Refresh RecyclerView内置自定义适配器,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有一个使用自定义适配器的回收器视图。我在自定义适配器上有一个按钮,可以在单击时从数据库中删除一行。这很好,但我现在希望视图从服务器更新,并向用户显示他们删除的行。我将在下面发布的代码没有给出任何错误,但没有正确刷新。我将附加我的类以及适配器。谢谢 Java public class MyReviews extends AppCompatActivity { private ArrayList reviewername; private ArrayList reviewscore
public class MyReviews extends AppCompatActivity {
private ArrayList reviewername;
private ArrayList reviewscore;
private ArrayList reviewerpic;
private ArrayList reviewdate;
private ArrayList reviewtext;
private ArrayList reviewid;
private static String url;
private String TAG = SearchScreen.class.getSimpleName();
private ProgressDialog pDialog;
private String userid;
SessionManagement session;
@Override
protected void onCreate(Bundle savedInstanceState) {
reviewername = new ArrayList<>();
reviewscore = new ArrayList<>();
reviewerpic = new ArrayList<>();
reviewdate = new ArrayList<>();
reviewtext = new ArrayList<>();
reviewid = new ArrayList<>();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_reviews);
setTitle("My Reviews");
session = new SessionManagement(getApplicationContext());
HashMap<String, String> user = session.getUserDetails();
userid = user.get(SessionManagement.KEY_ID);
url = "url" + userid;
Log.d("URL", url);
initViews();
}
private void initViews() {
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.myreviewslist);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
new GetMyReviews().execute();
}
private class GetMyReviews extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MyReviews.this);
pDialog.setMessage("Please Wait..");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray contacts = jsonObj.getJSONArray("MyGeek");
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
reviewername.add(c.getString("reviewername"));
reviewscore.add(c.getString("reviewscore"));
reviewerpic.add(c.getString("reviewerpic"));
reviewdate.add(c.getString("reviewdate"));
reviewtext.add(c.getString("reviewtext"));
reviewid.add(c.getString("reviewid"));
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
pDialog.hide();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.myreviewslist);
RecyclerView.Adapter adapter = new DataAdapterMyReviews(reviewername, reviewscore, reviewerpic, reviewdate, reviewtext, reviewid);
recyclerView.setAdapter(adapter);
}
}
}
public class DataAdapterMyReviews extends RecyclerView.Adapter<DataAdapterMyReviews.ViewHolder> {
private ArrayList<String> reviewername;
private ArrayList<String> reviewscore;
private ArrayList<String> reviewerpic;
private ArrayList<String> reviewdate;
private ArrayList<String> reviewtext;
private ArrayList<String> reviewid;
private static String url;
private String TAG = SearchScreen.class.getSimpleName();
private String success = "0";
public DataAdapterMyReviews(ArrayList<String> reviewername, ArrayList<String> reviewscore, ArrayList<String> reviewerpic, ArrayList<String> reviewdate, ArrayList<String> reviewtext, ArrayList<String> reviewid) {
this.reviewername = reviewername;
this.reviewscore = reviewscore;
this.reviewerpic = reviewerpic;
this.reviewscore = reviewscore;
this.reviewdate = reviewdate;
this.reviewtext = reviewtext;
this.reviewid = reviewid;
}
public void test(){
this.notifyDataSetChanged();
}
@Override
public DataAdapterMyReviews.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row_reviews_withdelete, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(DataAdapterMyReviews.ViewHolder viewHolder, int i) {
final int num;
viewHolder.reviewnametext2.setText(reviewername.get(i));
viewHolder.reviewscoretext2.setText(reviewscore.get(i));
viewHolder.reviewtext2.setText(reviewtext.get(i));
viewHolder.reviewdate2.setText(reviewdate.get(i));
Picasso.with(viewHolder.itemView.getContext())
.load(reviewerpic.get(i))
.into(viewHolder.userpicreview2);
num = i;
viewHolder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Delete ReviewID: ", reviewid.get(num));
url = "url" + reviewid.get(num);
new DeleteReview().execute();
}
});
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
@Override
public int getItemCount() {
return reviewername.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView userpicreview2;
private TextView reviewnametext2;
private TextView reviewscoretext2;
private TextView reviewtext2;
private TextView reviewdate2;
private Button delete;
public ViewHolder(View view) {
super(view);
userpicreview2 = (ImageView) view.findViewById(R.id.userpicreview);
reviewnametext2 = (TextView) view.findViewById(R.id.reviewnametext);
reviewscoretext2 = (TextView) view.findViewById(R.id.reviewscoretext);
reviewtext2 = (TextView) view.findViewById(R.id.reviewtext2);
reviewdate2 = (TextView) view.findViewById(R.id.reviewdatetext);
delete = (Button) view.findViewById(R.id.btnDeleteReview);
}
}
private class DeleteReview extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray contacts = jsonObj.getJSONArray("MyGeek");
// looping through All Contacts
JSONObject c = contacts.getJSONObject(0);
success = c.getString("success");
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
}
} else {
Log.e(TAG, "Couldn't get json from server.");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if(success.equals("1")){
Log.d("reviewdelete","success");
test();
}
else if(success.equals("0")){
Log.d("reviewdelete","fail");
}
}
}
}
公共类MyReviews扩展了AppCompative活动{
私有ArrayList名称;
私人ArrayList reviewscore;
私人ArrayList reviewerpic;
私人ArrayList reviewdate;
私人ArrayList reviewtext;
私人ArrayList reviewid;
私有静态字符串url;
私有字符串标记=SearchScreen.class.getSimpleName();
私人对话;
私有字符串用户标识;
会议管理会议;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
reviewername=new ArrayList();
ReviewCore=新的ArrayList();
reviewerpic=新的ArrayList();
reviewdate=新的ArrayList();
reviewtext=新建ArrayList();
reviewid=新的ArrayList();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u my\u reviews);
setTitle(“我的评论”);
会话=新会话管理(getApplicationContext());
HashMap user=session.getUserDetails();
userid=user.get(SessionManagement.KEY\u ID);
url=“url”+用户ID;
Log.d(“URL”,URL);
initViews();
}
私有void initViews(){
RecycleView RecycleView=(RecycleView)findViewById(R.id.MyReviewList);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
新建GetMyReviews().execute();
}
私有类GetMyReviews扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//显示进度对话框
pDialog=newprogressdialog(MyReviews.this);
pDialog.setMessage(“请稍候…”);
pDialog.setCancelable(假);
pDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…arg0){
HttpHandler sh=新的HttpHandler();
//向url发出请求并获得响应
字符串jsonStr=sh.makeServiceCall(url);
Log.e(标签,“来自url的响应:+jsonStr”);
if(jsonStr!=null){
试一试{
JSONObject jsonObj=新的JSONObject(jsonStr);
//获取JSON数组节点
JSONArray contacts=jsonObj.getJSONArray(“MyGeek”);
//通过所有触点循环
对于(int i=0;i
Java
public class MyReviews extends AppCompatActivity {
private ArrayList reviewername;
private ArrayList reviewscore;
private ArrayList reviewerpic;
private ArrayList reviewdate;
private ArrayList reviewtext;
private ArrayList reviewid;
private static String url;
private String TAG = SearchScreen.class.getSimpleName();
private ProgressDialog pDialog;
private String userid;
SessionManagement session;
@Override
protected void onCreate(Bundle savedInstanceState) {
reviewername = new ArrayList<>();
reviewscore = new ArrayList<>();
reviewerpic = new ArrayList<>();
reviewdate = new ArrayList<>();
reviewtext = new ArrayList<>();
reviewid = new ArrayList<>();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_reviews);
setTitle("My Reviews");
session = new SessionManagement(getApplicationContext());
HashMap<String, String> user = session.getUserDetails();
userid = user.get(SessionManagement.KEY_ID);
url = "url" + userid;
Log.d("URL", url);
initViews();
}
private void initViews() {
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.myreviewslist);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
new GetMyReviews().execute();
}
private class GetMyReviews extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MyReviews.this);
pDialog.setMessage("Please Wait..");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray contacts = jsonObj.getJSONArray("MyGeek");
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
reviewername.add(c.getString("reviewername"));
reviewscore.add(c.getString("reviewscore"));
reviewerpic.add(c.getString("reviewerpic"));
reviewdate.add(c.getString("reviewdate"));
reviewtext.add(c.getString("reviewtext"));
reviewid.add(c.getString("reviewid"));
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
pDialog.hide();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.myreviewslist);
RecyclerView.Adapter adapter = new DataAdapterMyReviews(reviewername, reviewscore, reviewerpic, reviewdate, reviewtext, reviewid);
recyclerView.setAdapter(adapter);
}
}
}
public class DataAdapterMyReviews extends RecyclerView.Adapter<DataAdapterMyReviews.ViewHolder> {
private ArrayList<String> reviewername;
private ArrayList<String> reviewscore;
private ArrayList<String> reviewerpic;
private ArrayList<String> reviewdate;
private ArrayList<String> reviewtext;
private ArrayList<String> reviewid;
private static String url;
private String TAG = SearchScreen.class.getSimpleName();
private String success = "0";
public DataAdapterMyReviews(ArrayList<String> reviewername, ArrayList<String> reviewscore, ArrayList<String> reviewerpic, ArrayList<String> reviewdate, ArrayList<String> reviewtext, ArrayList<String> reviewid) {
this.reviewername = reviewername;
this.reviewscore = reviewscore;
this.reviewerpic = reviewerpic;
this.reviewscore = reviewscore;
this.reviewdate = reviewdate;
this.reviewtext = reviewtext;
this.reviewid = reviewid;
}
public void test(){
this.notifyDataSetChanged();
}
@Override
public DataAdapterMyReviews.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row_reviews_withdelete, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(DataAdapterMyReviews.ViewHolder viewHolder, int i) {
final int num;
viewHolder.reviewnametext2.setText(reviewername.get(i));
viewHolder.reviewscoretext2.setText(reviewscore.get(i));
viewHolder.reviewtext2.setText(reviewtext.get(i));
viewHolder.reviewdate2.setText(reviewdate.get(i));
Picasso.with(viewHolder.itemView.getContext())
.load(reviewerpic.get(i))
.into(viewHolder.userpicreview2);
num = i;
viewHolder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Delete ReviewID: ", reviewid.get(num));
url = "url" + reviewid.get(num);
new DeleteReview().execute();
}
});
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
@Override
public int getItemCount() {
return reviewername.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView userpicreview2;
private TextView reviewnametext2;
private TextView reviewscoretext2;
private TextView reviewtext2;
private TextView reviewdate2;
private Button delete;
public ViewHolder(View view) {
super(view);
userpicreview2 = (ImageView) view.findViewById(R.id.userpicreview);
reviewnametext2 = (TextView) view.findViewById(R.id.reviewnametext);
reviewscoretext2 = (TextView) view.findViewById(R.id.reviewscoretext);
reviewtext2 = (TextView) view.findViewById(R.id.reviewtext2);
reviewdate2 = (TextView) view.findViewById(R.id.reviewdatetext);
delete = (Button) view.findViewById(R.id.btnDeleteReview);
}
}
private class DeleteReview extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray contacts = jsonObj.getJSONArray("MyGeek");
// looping through All Contacts
JSONObject c = contacts.getJSONObject(0);
success = c.getString("success");
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
}
} else {
Log.e(TAG, "Couldn't get json from server.");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if(success.equals("1")){
Log.d("reviewdelete","success");
test();
}
else if(success.equals("0")){
Log.d("reviewdelete","fail");
}
}
}
}
公共类DataAdapterMyReviews扩展了RecyclerView.Adapter{
私有ArrayList名称;
私人ArrayList reviewscore;
私人ArrayList reviewerpic;
私人ArrayList reviewdate;
私人ArrayList reviewtext;
私人ArrayList reviewid;
私有静态字符串url;
私有字符串标记=SearchScreen.class.getSimpleName();
私有字符串success=“0”;
public DataAdapterMyReviews(ArrayList ReviewName、ArrayList ReviewCore、ArrayList ReviewPic、ArrayList reviewdate、ArrayList reviewtext、ArrayList reviewid){
this.reviewername=reviewername;
this.reviewscore=reviewscore;
this.reviewerpic=reviewerpic;
this.reviewscore=reviewscore;
this.reviewdate=reviewdate;
this.reviewtext=reviewtext;
this.reviewid=reviewid;
}
公开无效测试(){
this.notifyDataSetChanged();
}
@凌驾
private class DeleteReview extends AsyncTask<Void, Void, Void> {
....your code...
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if(success.equals("1")){
//get the databaseListener object from your Adapter class constructor.
databaseListener.deleteSuccess();
}
else if(success.equals("0")){
databaseListener.deleteError();
}
}
reviewername.remove(i);
reviewscore.remove(i);
reviewerpic.remove(i);
reviewdate.remove(i);
reviewtext.remove(i);
reviewid.remove(i);