2017-08-08 126 views
-3

任何人都可以幫助我如何修復listview的searchview錯誤的結果。 例如我有來自列表視圖(A,B,C,D,E,F,G)的數據當我從searchview搜索數據B時,點擊它,總是顯示它的數據A,以及當我沒有搜索時來自searchview的數據結果如果爲真,我點擊數據A顯示A,B顯示B ...搜索過濾器列表查看錯誤搜索結果

這是我的代碼。

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.widget.SearchView; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import com.example.ihsan.kamjogja.models.Listkampus; 
import com.example.ihsan.kamjogja.models.Model; 
import com.example.ihsan.kamjogja.rest.RestAPI; 

import java.util.List; 

import okhttp3.OkHttpClient; 
import retrofit2.Call; 
import retrofit2.Callback; 
import retrofit2.Response; 
import retrofit2.Retrofit; 
import retrofit2.converter.gson.GsonConverterFactory; 

public class MainActivity extends Activity implements       NavigationView.OnNavigationItemSelectedListener,       AdapterView.OnItemClickListener { 


//deklarasi varibel untuk mengirim data ke activity lain 
public static final String ID_KAMPUS = "id"; 
public static final String NAMA_KAMPUS = "namakampus"; 
public static final String TLP   = "tlp"; 
public static final String ALAMAT  = "alamat"; 
public static final String WEB   = "website"; 
public static final String LAT   = "lat"; 
public static final String LOG   = "log"; 
//jurusan1 
public static final String Nj1 = "jurusan1"; 
public static final String Jj1 = "jenjang1"; 
public static final String Ak1 = "akreditasi1"; 
//jurusan2 
public static final String Nj2 = "jurusan2"; 
public static final String Jj2 = "jenjang2"; 
public static final String Ak2 = "akreditasi2"; 
//jurusan3 
public static final String Nj3 = "jurusan3"; 
public static final String Jj3 = "jenjang3"; 
public static final String Ak3 = "akreditasi3"; 
//jurusan4 
public static final String Nj4 = "jurusan4"; 
public static final String Jj4 = "jenjang4"; 
public static final String Ak4 = "akreditasi4"; 
//jurusan5 
public static final String Nj5 = "jurusan5"; 
public static final String Jj5 = "jenjang5"; 
public static final String Ak5 = "akreditasi5"; 
//jurusan6 
public static final String Nj6 = "jurusan6"; 
public static final String Jj6 = "jenjang6"; 
public static final String Ak6 = "akreditasi6"; 
//jurusan7 
public static final String Nj7 = "jurusan7"; 
public static final String Jj7 = "jenjang7"; 
public static final String Ak7 = "akreditasi7"; 
//jurusan8 
public static final String Nj8 = "jurusan8"; 
public static final String Jj8 = "jenjang8"; 
public static final String Ak8 = "akreditasi8"; 
//jurusan9 
public static final String Nj9 = "jurusan9"; 
public static final String Jj9 = "jenjang9"; 
public static final String Ak9 = "akreditasi9"; 
//jurusan10 
public static final String Nj10 = "jurusan10"; 
public static final String Jj10 = "jenjang10"; 
public static final String Ak10 = "akreditasi10"; 
//jurusan11 
public static final String Nj11 = "jurusan11"; 
public static final String Jj11 = "jenjang11"; 
public static final String Ak11 = "akreditasi11"; 
//jurusan12 
public static final String Nj12 = "jurusan12"; 
public static final String Jj12 = "jenjang12"; 
public static final String Ak12 = "akreditasi12"; 
//jurusan13 
public static final String Nj13 = "jurusan13"; 
public static final String Jj13 = "jenjang13"; 
public static final String Ak13 = "akreditasi13"; 
//jurusan14 
public static final String Nj14 = "jurusan14"; 
public static final String Jj14 = "jenjang14"; 
public static final String Ak14 = "akreditasi14"; 
//jurusan15 
public static final String Nj15 = "jurusan15"; 
public static final String Jj15 = "jenjang15"; 
public static final String Ak15 = "akreditasi15"; 
//jurusan16 
public static final String Nj16 ="jurusan16"; 
public static final String Jj16 ="jenjang16"; 
public static final String Ak16 ="akreditasi16"; 

//listview untuk menampilkan data 
private ListView listview; 
private android.widget.SearchView searchview; 
//varibel books bertipe List dan List tersebut berdasarkan objek Listkampus 
private List<Listkampus> books; 
ProgressDialog loading; 
private OkHttpClient.Builder httpClient; 



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


    //inisialisasi listview 
    searchview = (android.widget.SearchView) findViewById(R.id.pencarian); 
    listview = (ListView) findViewById(R.id.list); 


    //memanggil method untuk mengambil data kampus 
    getkampus(); 

    //setting onItemClickListener untuk listview 
    listview.setOnItemClickListener(this); 


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    //setSupportActionBar(toolbar); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 


private void getkampus() { 
    //Ketika Aplikasi mengambil data kita akan melihat progress dialog 
    loading = ProgressDialog.show(this,"Sedang Mengambil Data","Harap Tunggu Sebentar ",false,false); 


    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(Config.ROOT_URL) 
      .addConverterFactory(GsonConverterFactory.create())//GsonConverter untuk parsing json 
      .build(); 

    RestAPI service = retrofit.create(RestAPI.class); 

    Call<Model> call = service.loadListBooks(); 
    call.enqueue(new Callback<Model>() { //Asyncronous Request 
     @Override 
     public void onResponse(Call<Model> call, Response<Model> response) { 
      loading.dismiss(); 
      List<Listkampus> kampus = response.body().getListkampus(); 

      //memasukkan data dari varibel kampus ke books 
      books = kampus; 
      //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 kampus 
    String[] items = new String[books.size()]; 

    for (int i = 0; i < books.size(); i++) { 
     items[i] = books.get(i).getNama(); 

    } 


    //Membuat Array Adapter for listview 
    final ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.my_list_font, items); 

    //setting adapter untuk listview 
    listview.setAdapter(adapter); 
    searchview.setOnQueryTextListener(new android.widget.SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return true; 
     } 
     @Override 
     public boolean onQueryTextChange(String text) { 
      adapter.getFilter().filter(text); 
      return 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, InfoKampus.class); 
    //mengambil buku dari list 
    Listkampus listkampus = books.get(position); 
    //menambahkan detail buku untuk intent 
    intent.putExtra(ID_KAMPUS, listkampus.getIdKampus()); 
    intent.putExtra(NAMA_KAMPUS, listkampus.getNama()); 
    intent.putExtra(TLP, listkampus.getTlp()); 
    intent.putExtra(ALAMAT, listkampus.getAlamat()); 
    intent.putExtra(WEB, listkampus.getWebsite()); 
    intent.putExtra(LAT, listkampus.getLat()); 
    intent.putExtra(LOG, listkampus.getLog()); 
    //1 
    intent.putExtra(Nj1, listkampus.getNj1()); 
    intent.putExtra(Jj1, listkampus.getJj1()); 
    intent.putExtra(Ak1, listkampus.getAk1()); 
    //2 
    intent.putExtra(Nj2, listkampus.getNj2()); 
    intent.putExtra(Jj2, listkampus.getJj2()); 
    intent.putExtra(Ak2, listkampus.getAk2()); 
    //3 
    intent.putExtra(Nj3, listkampus.getNj3()); 
    intent.putExtra(Jj3, listkampus.getJj3()); 
    intent.putExtra(Ak3, listkampus.getAk3()); 
    //4 
    intent.putExtra(Nj4, listkampus.getNj4()); 
    intent.putExtra(Jj4, listkampus.getJj4()); 
    intent.putExtra(Ak4, listkampus.getAk4()); 
    //5 
    intent.putExtra(Nj5, listkampus.getNj5()); 
    intent.putExtra(Jj5, listkampus.getJj5()); 
    intent.putExtra(Ak5, listkampus.getAk5()); 
    //6 
    intent.putExtra(Nj6, listkampus.getNj6()); 
    intent.putExtra(Jj6, listkampus.getJj6()); 
    intent.putExtra(Ak6, listkampus.getAk6()); 
    //7 
    intent.putExtra(Nj7, listkampus.getNj7()); 
    intent.putExtra(Jj7, listkampus.getJj7()); 
    intent.putExtra(Ak7, listkampus.getAk7()); 
    //8 
    intent.putExtra(Nj8, listkampus.getNj8()); 
    intent.putExtra(Jj8, listkampus.getJj8()); 
    intent.putExtra(Ak8, listkampus.getAk8()); 
    //9 
    intent.putExtra(Nj9, listkampus.getNj9()); 
    intent.putExtra(Jj9, listkampus.getJj9()); 
    intent.putExtra(Ak9, listkampus.getAk9()); 
    //10 
    intent.putExtra(Nj10, listkampus.getNj10()); 
    intent.putExtra(Jj10, listkampus.getJj10()); 
    intent.putExtra(Ak10, listkampus.getAk10()); 
    //11 
    intent.putExtra(Nj11, listkampus.getNj11()); 
    intent.putExtra(Jj11, listkampus.getJj11()); 
    intent.putExtra(Ak11, listkampus.getAk11()); 
    //12 
    intent.putExtra(Nj12, listkampus.getNj12()); 
    intent.putExtra(Jj12, listkampus.getJj12()); 
    intent.putExtra(Ak12, listkampus.getAk12()); 
    //13 
    intent.putExtra(Nj13, listkampus.getNj13()); 
    intent.putExtra(Jj13, listkampus.getJj13()); 
    intent.putExtra(Ak13, listkampus.getAk13()); 
    //14 
    intent.putExtra(Nj14, listkampus.getNj14()); 
    intent.putExtra(Jj14, listkampus.getJj14()); 
    intent.putExtra(Ak14, listkampus.getAk14()); 
    //15 
    intent.putExtra(Nj15, listkampus.getNj15()); 
    intent.putExtra(Jj15, listkampus.getJj15()); 
    intent.putExtra(Ak15, listkampus.getAk15()); 
    //16 
    intent.putExtra(Nj16, listkampus.getNj16()); 
    intent.putExtra(Jj16, listkampus.getJj16()); 
    intent.putExtra(Ak16, listkampus.getAk16()); 

    startActivity(intent); 

} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
+0

你應該使用自定義您的ListView適配器類的內部過濾器,以獲得最佳搜索結果 – sam

+0

ü可以給我一些例子。主..?? –

回答