ListView过滤器不能使用SearchView,如何使用过滤器更新列表视图?
这是我的第3个问题在stackoverflow,因为我不知道如何使用stackoverflow。我的问题是关于我的论文的项目。请帮我... 我有1个列表视图和1个SearchView。我想搜索过滤器添加到我的列表视图,我的问题是:ListView过滤器不能使用SearchView,如何使用过滤器更新列表视图?
- 我有一些项目在ListView中显示
- 例如,在第一次名单上有数据“Aisyah”,并在接下来的名单上有数据“ Farhan“按名称排序,当我在ListView的顶部键入”FA“ListView时显示”Farhan“。
- 但是当我点击,选择对“Aisyah”(第一项的ListView)不是“法尔汉”
基本上,在列表视图中的数据的位置是没有得到后我们刷新制成已经执行搜索。但我不知道如何刷新ListView并获取正确的数据位置。
请帮帮我......我在这里呆了好几天。 这是我的代码..
public class DosenActivity extends AppCompatActivity implements ListView.OnItemClickListener, SearchView.OnQueryTextListener {
//root url dari webservice
public static final String ROOT_URL = "http://fyptes.esy.es/";
//deklarasi varibel untuk mengirim data ke activity lain
public static final String ID = "id";
public static final String NAMA = "nama";
public static final String SITUS = "situs";
public static final String EMAIL = "email";
public static final String TELEPON = "telepon";
public static final String KANTOR = "kantor";
public static final String JABATAN = "jabatan";
public static final String MATKUL = "matkul";
public static final String FOTO = "foto";
//listview untuk menampilkan data
private ListView listview;
//varibel books bertipe List dan List tersebut berdasarkan objek Listdosen
private List<Listdosen> dosens;
private ArrayAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dosen);
Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
//inisialisasi listview
listview = (ListView) findViewById(R.id.listViewDosen);
//memanggil method untuk mengambil data dosen
getDosen();
//setting onItemClickListener untuk listview
listview.setOnItemClickListener(this);
}
private void getDosen() {
//Ketika Aplikasi mengambil data kita akan melihat progress dialog
final ProgressDialog loading = ProgressDialog.show(this,"Mengambil Data","Mohon tunggu..",false,false);
//Logging Interceptor
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
//set Level Log
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(logging);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ROOT_URL)
.addConverterFactory(GsonConverterFactory.create())//GsonConverter untuk parsing json
.client(httpClient.build())
.build();
RestAPI service = retrofit.create(RestAPI.class);
Call<Model> call = service.loadListDosen();
call.enqueue(new Callback<Model>() { //Asyncronous Request
@Override
public void onResponse(Call<Model> call, Response<Model> response) {
loading.dismiss();
List<Listdosen> dosen = response.body().getListdosen();
//memasukkan data dari varibel dosen ke dosens
dosens = dosen;
//memanggil method untuk menampilkan list
showList();
}
@Override
public void onFailure(Call<Model> call, Throwable t) {
}
});
}
private void showList() {
//String array untuk menyimpan nama semua nama dosen
String[] items = new String[dosens.size()];
for (int i = 0; i < dosens.size(); i++) {
items[i] = dosens.get(i).getNama();
}
//Membuat Array Adapter for listview
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_dosen_listview, items);
//setting adapter untuk listview
listview.setAdapter(adapter);
listview.setTextFilterEnabled(true);
adapter.setNotifyOnChange(true);
}
//method ini akan dieksekusi ketikan listitem diklik
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//membuat intent
Intent intent = new Intent(this, DosenDetailActivity.class);
//mengambil dosen dari list
Listdosen listdosen = dosens.get(position);
//menambahkan detail dosen untuk intent
intent.putExtra(ID, listdosen.getId());
intent.putExtra(NAMA, listdosen.getNama());
intent.putExtra(SITUS, listdosen.getSitus());
intent.putExtra(EMAIL, listdosen.getEmail());
intent.putExtra(TELEPON, listdosen.getTelepon());
intent.putExtra(KANTOR, listdosen.getKantor());
intent.putExtra(JABATAN, listdosen.getJabatan());
intent.putExtra(MATKUL, listdosen.getMatkul());
intent.putExtra(FOTO, listdosen.getFoto());
//memulai activity lain untuk menampilkan detail dosen
startActivity(intent);
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(menu);
}
public boolean onQueryTextChange(String newText) {
// this is your adapter that will be filtered
if (TextUtils.isEmpty(newText))
{
listview.clearTextFilter();
}
else
{
listview.setFilterText(newText.toString());
}
return true;
}
public boolean onQueryTextSubmit(String query) {
// TODO Auto-generated method stub
return false;
}
}
使用下面的代码中搜索名称,再次填充根据搜索query.It是对我工作的罚款列表视图。
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
textlength = edittext.getText().length();
ArrayList<HashMap<String, String>> arrayList2 = new ArrayList<HashMap<String, String>>();
// arrayList2 = arraylist;
for (int i = 0; i < arraylist.size(); i++) {
username[i] = arraylist.get(i).get("Username");
Log.d("unm", username[i]);
}
for (int i = 0; i < arraylist.size(); i++) {
if (textlength <= username[0].length()) {
if (username[i].toLowerCase().contains(
edittext.getText().toString().toLowerCase().trim())) {
arrayList2.add(arraylist.get(i));
}
}
}
adapter = new ListViewAdapter(getApplicationContext(), arrayList2);
listview.setAdapter(adapter);
}
@Override
public void afterTextChanged(Editable s) {
}
});
但我使用SearchView不编辑文本,我该如何使用它? – pahlevikun
以及我不知道SearchView,但如果你可以使用EditText,而不是SearchView,这将最适合你 –
我会尝试使用edittext :) – pahlevikun
我试图前实施这一一段时间,但是,它的工作没有'searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));'你得到选为“Aisyah”因为你搜索后 –
是更新列表视图。查看我的回答我已经发布了完整的代码。 –
我刚刚删除了 searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 但仍然不适合我... – pahlevikun