2017-03-08 138 views
0

我有3 spinners在我的项目名为标准,师和年龄。它们包含来自json数据的值。当我从每个人spinner中选择一个值时,它会分别显示listview中的学生的所有数据(从json中获取)。筛选列表查看结果后选择微调值

我用下面的JSON数据工作:

[ 
{ 
"name":"aarti", 
"surname":"singh", 
"age":"18", 
"div":"A", 
"standard":"7" 
}, 
{ 
"name":"seema", 
"surname":"desai", 
"age":"17", 
"div":"B", 
"standard":"7" 
}, 
{ 
"name":"tina", 
"surname":"joshi", 
"age":"18", 
"div":"A", 
"standard":"8" 
}, 
{ 
"name":"megha", 
"surname":"kale", 
"age":"17", 
"div":"A", 
"standard":"7" 
}, 
{ 
"name":"swati", 
"surname":"marathe", 
"age":"18", 
"div":"A", 
"standard":"8" 
}, 
{ 
"name":"rekha", 
"surname":"surve", 
"age":"17", 
"div":"A", 
"standard":"7" 
}, 
{ 
"name":"madhu", 
"surname":"dalvi", 
"age":"18", 
"div":"B", 
"standard":"6" 
} 

我试图做这样的方式: 当我选择从微调标准的7应该显示学生信息在第七研究标准(“aarti”,“seema”,“megha”,“rekha”)及其他信息。 然后我选择分区控制器的值为“A”,它应该获得上述结果,并据此显示标准7和分区“A”的学生。它应该显示结果(“aarti”,“megha”,“rekha”)及其他信息。 最后,当我从年龄选择价值微调“17”,它应该采取以上结果授予,并相应地显示学生从标准7和师“A”和年龄“17”。因此它显示“megha”和“rekha”。

谁能请帮助我

这是我MainActivity.java类:

public class MainActivity extends AppCompatActivity { 

ArrayList<String> AllStandards = new ArrayList<>(); 
ArrayList<String> AllDivision = new ArrayList<>(); 
ArrayList<String> AllAge = new ArrayList<>(); 
JSONArray jsonArray; 
Spinner spinner_std, spinner_div, spinner_age; 
private ArrayList<StudInfo> studentVOList = new ArrayList<>(); 

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

final List<String> item_Std = getStandard("data.json"); 
final List<String> items_div = getDivision("data.json"); 
final List<String> items_age = getAge("data.json"); 

/*spinner for standard*/ 
spinner_std = (Spinner) findViewById(R.id.spinnerStandard); 
ArrayAdapter<String> adapter_std = new ArrayAdapter<String>(this,  R.layout.spinner_standard_layout, R.id.textViewStandard, item_Std); 

adapter_std.getFilter().filter(txt); 

spinner_std.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
    try { 

     String standard = AllStandards.get(i); 

     if (studentVOList.size() > 0) 
      studentVOList.clear(); 
     for (int j = 0; j < jsonArray.length(); j++) { 
      JSONObject jsonObject = jsonArray.getJSONObject(j); 
      String stand = jsonObject.getString("standard"); 
      if (stand.equalsIgnoreCase(standard)) { 
       StudInfo studentVO = new StudInfo(); 

       studentVO.setName(jsonObject.getString("name")); 
       studentVO.setSurname(jsonObject.getString("surname")); 
       studentVO.setAge(jsonObject.getString("age")); 
       studentVO.setDiv(jsonObject.getString("div")); 
       studentVO.setStandard(jsonObject.getString("standard")); 

       studentVO.setStandard(stand); 
       studentVOList.add(studentVO); 
      } 
     } 
     // Log.d("TAG", "List With All Students in selected standard: " + studentVOList.size()); 

     Intent intent = new Intent(getApplicationContext(), StudentsInfo.class); 
     Bundle b = new Bundle(); 
     b.putSerializable("list", studentVOList); 
     intent.putExtra("bundle", b); 
     startActivity(intent); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

public void onNothingSelected(AdapterView<?> arg0) { 
} 
}); 
spinner_std.setAdapter(adapter_std); 

/*spinner for division*/ 
spinner_div = (Spinner) findViewById(R.id.spinnerDiv); 
ArrayAdapter<String> adapter_div = new ArrayAdapter<String>(this, R.layout.spinner_division_layout, R.id.textViewDivision, items_div); 
adapter_div.getFilter().filter(txt); 

spinner_div.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
    try { 

     String division = AllDivision.get(i); 

     if (studentVOList.size() > 0) 
      studentVOList.clear(); 
     for (int j = 0; j < jsonArray.length(); j++) { 
      JSONObject jsonObject = jsonArray.getJSONObject(j); 
      String div = jsonObject.getString("div"); 
      // Collections.sort(AllDivision); 

      if (div.equalsIgnoreCase(division)) { 
       StudInfo studentVO = new StudInfo(); 

       studentVO.setName(jsonObject.getString("name")); 
       studentVO.setSurname(jsonObject.getString("surname")); 
       studentVO.setAge(jsonObject.getString("age")); 
       studentVO.setStandard(jsonObject.getString("standard")); 
       studentVO.setDiv(jsonObject.getString("div")); 

       studentVO.setDiv(div); 
       studentVOList.add(studentVO); 
      } 
     } 
     Intent intent = new Intent(getApplicationContext(), StudentsInfo.class); 
     Bundle b = new Bundle(); 
     b.putSerializable("list", studentVOList); 
     intent.putExtra("bundle", b); 

     startActivity(intent); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

public void onNothingSelected(AdapterView<?> arg0) { 
} 
}); 
spinner_div.setAdapter(adapter_div); 

/*spinner for age*/ 
spinner_age = (Spinner) findViewById(R.id.spinerAge); 
ArrayAdapter<String> adapter_age = new ArrayAdapter<String>(this, R.layout.spinner_age_layout, R.id.textViewAge, items_age); 
adapter_age.getFilter().filter(txt); 

spinner_age.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
    try { 

     String age = AllAge.get(i); 

     if (studentVOList.size() > 0) 
      studentVOList.clear(); 
     for (int j = 0; j < jsonArray.length(); j++) { 
      JSONObject jsonObject = jsonArray.getJSONObject(j); 
      String age_list = jsonObject.getString("age"); 
      Collections.sort(AllAge); 

      if (age_list.equalsIgnoreCase(age)) { 
       StudInfo studentVO = new StudInfo(); 

       studentVO.setName(jsonObject.getString("name")); 
       studentVO.setSurname(jsonObject.getString("surname")); 
       studentVO.setDiv(jsonObject.getString("div")); 
       studentVO.setStandard(jsonObject.getString("standard")); 
       studentVO.setAge(jsonObject.getString("age")); 

       studentVO.setAge(age_list); 
       studentVOList.add(studentVO); 
      } 
     } 
     Intent intent = new Intent(getApplicationContext(), StudentsInfo.class); 
     Bundle b = new Bundle(); 
     b.putSerializable("list", studentVOList); 
     intent.putExtra("bundle", b); 

     startActivity(intent); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

public void onNothingSelected(AdapterView<?> arg0) { 
} 
}); 
spinner_age.setAdapter(adapter_age); 

}//onCreate Method 

private List<String> getStandard(String fileName) { 
jsonArray = null; 
try { 
InputStream is = getResources().getAssets().open(fileName); 
int size = is.available(); 
byte[] data = new byte[size]; 
is.read(data); 
is.close(); 
String json = new String(data, "UTF-8"); 

// AllStandards.clear(); 
try { 
    jsonArray = new JSONArray(json); 

    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject jsonObject = jsonArray.getJSONObject(i); 
     String stand = jsonObject.getString("standard"); 

     if (!AllStandards.contains(stand)) { 
      AllStandards.add(stand); 
     } 
    } 
} catch (JSONException je) { 
    je.printStackTrace(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
} catch (IOException e) { 
e.printStackTrace(); 
} 
return AllStandards; 
} 

private List<String> getDivision(String fileName) { 
jsonArray = null; 
try { 
InputStream is = getResources().getAssets().open(fileName); 
int size = is.available(); 
byte[] data = new byte[size]; 
is.read(data); 
is.close(); 
String json = new String(data, "UTF-8"); 
try { 
    jsonArray = new JSONArray(json); 

    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject jsonObject = jsonArray.getJSONObject(i); 
     String stand = jsonObject.getString("div"); 
     if (!AllDivision.contains(stand)) { 
      AllDivision.add(stand); 
     } 
    } 
} catch (JSONException je) { 
    je.printStackTrace(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
} catch (IOException e) { 
e.printStackTrace(); 
} 
return AllDivision; 
} 

private List<String> getAge(String fileName) { 
jsonArray = null; 
try { 
InputStream is = getResources().getAssets().open(fileName); 
int size = is.available(); 
byte[] data = new byte[size]; 
is.read(data); 
is.close(); 
String json = new String(data, "UTF-8"); 
try { 
    jsonArray = new JSONArray(json); 

    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject jsonObject = jsonArray.getJSONObject(i); 
     String stand = jsonObject.getString("age"); 
     if (!AllAge.contains(stand)) { 
      AllAge.add(stand); 
     } 
    } 
} catch (JSONException je) { 
    je.printStackTrace(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
} catch (IOException e) { 
e.printStackTrace(); 
} 
return AllAge; 
} 

这是我ListAdapter.java类

public class ListAdapter extends ArrayAdapter<StudInfo> { 
int vg; 
ArrayList<StudInfo> list; 
Context context; 

public ListAdapter(Context context, int vg, int id, ArrayList<StudInfo> list) { 
super(context, vg, id, list); 
this.context = context; 
this.vg = vg; 
this.list = list; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 

LayoutInflater inflater = (LayoutInflater)  context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

View itemView = inflater.inflate(vg, parent, false); 

TextView textViewName = (TextView) itemView.findViewById(R.id.txtName); 
TextView textViewSurname = (TextView)itemView.findViewById(R.id.txtSurname); 
TextView textViewAge = (TextView) itemView.findViewById(R.id.txtAge); 
TextView textViewDiv = (TextView) itemView.findViewById(R.id.txtDiv); 
TextView textViewStd = (TextView) itemView.findViewById(R.id.txtStandard); 

textViewName.setText(list.get(position).getName()); 
textViewSurname.setText(list.get(position).getSurname()); 
textViewAge.setText(list.get(position).getAge()); 
textViewDiv.setText(list.get(position).getDiv()); 
textViewStd.setText(list.get(position).getStandard()); 

return itemView; 
} 
} 

这是我StudentsInfo.java类

public class StudentsInfo extends Activity { 

ListView listView; 

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

Bundle b = getIntent().getBundleExtra("bundle"); 

ArrayList<StudInfo> studentVOList = (ArrayList<StudInfo>) b.getSerializable("list"); 

ListView listView = (ListView) findViewById(R.id.listViewShow); 
ListAdapter listAdapter = new ListAdapter(this, R.layout.list_layout, R.id.txtName, studentVOList); 
listView.setAdapter(listAdapter); 
} 
} 

这是我StudInfo.java类,

import java.io.Serializable; 

public class StudInfo implements Serializable 
{ 
private String name; 
private String surname; 
private String age; 
private String div; 
private String standard; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getSurname() { 
    return surname; 
} 

public void setSurname(String surname) { 
    this.surname = surname; 
} 

public String getAge() { 
    return age; 
} 

public void setAge(String age) { 
    this.age = age; 
} 

public String getDiv() { 
    return div; 
} 

public void setDiv(String div) { 
    this.div = div; 
} 

public String getStandard() { 
    return standard; 
} 

public void setStandard(String standard) { 
    this.standard = standard; 
} 
} 

我试着用搜索引擎找到了解决办法,但我发现是基于对所有使用搜索列表视图edittext.i项目的问题没有发现蚂蚁类似的职位匹配我的问题这解决了我的问题。任何人都可以帮我解决这个问题?在您的适配器类

2.使用adapter.getFilter()

回答

0

1.覆盖用getFilter方法。过滤器(TXT)在您的微调选择

package com.hughesnet.adapters; 

import com.hughesnet.R; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Filter; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class ListAdapter extends ArrayAdapter<StudInfo> { 
int     vg; 
ArrayList<StudInfo> list; 
Context    context; 
ItemFilter mFilter; 
ArrayList<StudInfo> filteredData; 

public ListAdapter (Context context, int vg, int id, ArrayList<StudInfo> list) { 

    super (context, vg, id, list); 
    this.context = context; 
    this.vg = vg; 
    this.list = list; 
} 

public View getView (int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); 

    View itemView = inflater.inflate (vg, parent, false); 

    TextView textViewName = (TextView) itemView.findViewById (R.id.txtName); 
    TextView textViewSurname = (TextView) itemView.findViewById (R.id.txtSurname); 
    TextView textViewAge = (TextView) itemView.findViewById (R.id.txtAge); 
    TextView textViewDiv = (TextView) itemView.findViewById (R.id.txtDiv); 
    TextView textViewStd = (TextView) itemView.findViewById (R.id.txtStandard); 

    textViewName.setText (list.get (position).getName()); 
    textViewSurname.setText (list.get (position).getSurname()); 
    textViewAge.setText (list.get (position).getAge()); 
    textViewDiv.setText (list.get (position).getDiv()); 
    textViewStd.setText (list.get (position).getStandard()); 

    return itemView; 
} 

ItemFilter mFilter = new ItemFilter(); 

public Filter getFilter() { 

    return mFilter; 
} 

private class ItemFilter extends Filter { 
    @Override 
    protected FilterResults performFiltering (CharSequence constraint) { 

     String filterString = constraint.toString().toLowerCase(); 

     FilterResults results = new FilterResults(); 

     int count = list.size(); 
     final ArrayList<StudInfo> nlist = new ArrayList<StudInfo> (count); 

     String filterableString; 

     for (int i = 0; i < count; i++) { 
      StudInfo info = list.get (i); 
      // Check for standard, division and age here 
      if (info.getAge().contains(filterString) || info.getStandard().contains(filterString) || info.getDiv().contains(filterString)) { 
       nlist.add (filterableString); 
      } 
     } 

     results.values = nlist; 
     results.count = nlist.size(); 

     return results; 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     filteredData = (ArrayList<StudInfo>) results.values; 
     notifyDataSetChanged(); 
    } 
} 

}

+0

评论不适合长时间讨论;这个对话已经[转移到聊天](http://chat.stackoverflow.com/rooms/137842/discussion-on-answer-by-pehlaj-filtering-listview-results-after-selecting-spinne)。 –