[英]Android: Refresh Listview Item upon clicking spinner Item
Hello guys I have this problem, I want my app to refresh or update the listview items upon clicking a specific spinner item. 大家好,我遇到了这个问题,我希望我的应用在单击特定的微调项时刷新或更新Listview项。 here is the screenshot
这是屏幕截图
and I have no idea on what I'm gonna do, and this is my code so far :( 而且我不知道我要做什么,这是到目前为止的代码:(
public class ViewGrade extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
private ListView mylistView;
private String subj_code = "";
private String subj_code_lab = "";
private Spinner spinTerm;
private List<GradeList> gradeList = new ArrayList<GradeList>();
private GradeAdapter arrayAdapter;
private ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_grade);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
spinTerm = (Spinner) findViewById(R.id.spinTerm);
String[] Term = new String[]{"Prelim", "Midterm", "Tentative Final"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, Term);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinTerm.setAdapter(adapter);
SharedPreferences preferences = getSharedPreferences("MyApp", MODE_PRIVATE);
subj_code = preferences.getString("code", "UNKNOWN");
subj_code_lab = preferences.getString("code_lab", "UNKNOWN");
mylistView = (ListView) findViewById(R.id.list);
arrayAdapter = new GradeAdapter(this, gradeList);
mylistView.setAdapter(arrayAdapter);
new loadGrades().execute();
}
public class loadGrades extends AsyncTask<Void, Void, Void>{
String term = spinTerm.getSelectedItem().toString();
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ViewGrade.this);
// Showing progress dialog before making http request
pDialog.setMessage("Loading...");
pDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
String url = null;
try {
url = "http://192.168.22.3/MobileClassRecord/getGrade.php?subj_code="+ URLEncoder.encode(subj_code, "UTF-8")+"&term="+URLEncoder.encode(term, "UTF-8");
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}
ServiceHandler jsonParser = new ServiceHandler();
String json = jsonParser.makeServiceCall(url, ServiceHandler.GET);
Log.e("Response; ", "> " + json);
if (json != null){
try {
JSONObject object = new JSONObject(json);
if (object != null){
JSONArray grade_array = object.getJSONArray("grade");
for (int i = 0; i < grade_array.length(); i++){
JSONObject grade = (JSONObject) grade_array.get(i);
GradeList grade_list = new GradeList();
grade_list.setName(grade.getString("stud_name"));
grade_list.setGrade(grade.getString("grade"));
grade_list.setRemark(grade.getString("remark"));
gradeList.add(grade_list);
}
}
arrayAdapter.notifyDataSetChanged();
}catch (JSONException e){
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
pDialog.dismiss();
}
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_view_grade, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
Intent intent = new Intent(ViewGrade.this, SpecificClassRecord.class);
startActivity(intent);
return true;
case R.id.action_add_grade:
Intent intent1 = new Intent(ViewGrade.this, Grade.class);
startActivity(intent1);
}
return super.onOptionsItemSelected(item);
}
}
adapter.notifydatasetChanged() or if you know the specific item inserted/removed, just use adapter.notifyitemInserted/Removed etc. adapter.notifydatasetChanged(),或者如果您知道插入/删除了特定项,则只需使用adapter.notifyitemInserted / Removed等。
Add this code in your onClickListener for spinner 将此代码添加到您的onClickListener中以进行微调
覆盖微调器的onItemClick()侦听器方法,然后在您调用列表视图的adapter.notifydatasetChanged()的方法内部
spinTerm.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// change the adapter values if your list is being changedin anyway
arrayAdapter.notifydatasetChanged();
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.