2017-01-15 1 views
1

Je construis une application très basique: J'ai une liste, une fois que vous cliquez sur un élément de cette liste, vous obtenez une boîte de dialogue d'alerte avec plus d'informations sur l'élément cliqué. J'ai implémenté une fonction de recherche de filtre et ça marche plutôt bien mais il y a un gros problème: disons du texte dans la barre de recherche "1" et vous obtenez à l'écran tous les éléments commençant par 1, donc: 1, 11, 12, 13, 14, 15 etc.ListView indexation et SearchView

Lorsque vous cliquez sur le deuxième élément de la nouvelle liste, vous n'obtiendrez pas R.layout.11 == 1 et non le 11e élément avec id == 12.

De toute évidence, il ne s'agit pas uniquement du second élément, mais de tous les éléments de la liste filtrée. Quelqu'un peut-il m'aider avec ce problème? Avez-vous une idée sur la façon de le résoudre? Je suis très nouveau à l'application Android en développement, je sais peu de choses sur Java, je suis en train d'apprendre, je vous remercie pour votre patience.

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

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_max); 

    final String[] nameproducts = new String[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; 

    // ArrayList 
    final ArrayList<String> list = new ArrayList<String>(); 
    for (int i = 0; i < nameproducts.length; ++i) { 
     list.add(nameproducts[i]); 

    } 

    final ListView mylist = (ListView) findViewById(R.id.listView1); 

    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 

    sv=(SearchView) findViewById(R.id.searchView1); 
    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String text) { 
      return false; 

     } 

     @Override 
     public boolean onQueryTextChange(String text) { 
      adapter.getFilter().filter(text); 
      return false; 

     } 

    }); 

    mylist.setAdapter(adapter); 

    mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> testo, View v, int pos, long id) { 

      if (id == 0) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this); 
       builder.setCancelable(true); 
       LayoutInflater inflater = getLayoutInflater(); 
       View view = inflater.inflate(R.layout.1, null); 
       builder.setView(view); 
       builder.show(); 
      } 

      if (id == 1) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this); 
       builder.setCancelable(true); 
       LayoutInflater inflater = getLayoutInflater(); 
       View view = inflater.inflate(R.layout.2, null); 
       builder.setView(view); 
       builder.show(); 
      } 

      if (id == 2) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(MaxActivity.this); 
       builder.setCancelable(true); 
       LayoutInflater inflater = getLayoutInflater(); 
       View view = inflater.inflate(R.layout.3, null); 
       builder.setView(view); 
       builder.show(); 
      } 

     } 

    }); 

} 

Répondre

0

Que diriez-vous de vérifier la valeur de l'élément cliqué plutôt que l'id. Cela fonctionne:

@Override 
public void onItemClick(AdapterView<?> test, View v, int pos, long id) { 
    String num = test.getItemAtPosition((int)id).toString(); 
    if (num.equalsIgnoreCase("11")) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
     builder.setCancelable(true); 
     LayoutInflater inflater = getLayoutInflater(); 
     View view = inflater.inflate(R.layout.eleven, null); 
     builder.setView(view); 
     builder.show(); 
    } 
    else if (num.equalsIgnoreCase("12")) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
     builder.setCancelable(true); 
     LayoutInflater inflater = getLayoutInflater(); 
     View view = inflater.inflate(R.layout.twelve, null); 
     builder.setView(view); 
     builder.show(); 
    }