2017-01-15 5 views
1

Ich baue eine sehr einfache App: Ich habe eine Liste, sobald Sie auf ein Element dieser Liste klicken, erhalten Sie einen Warndialog mit mehr Informationen über das angeklickte Element.ListView Indizierung und SearchView

Ich habe eine Filtersuchfunktion implementiert und es funktioniert ziemlich gut, aber es gibt ein großes Problem: Sagen wir, Sie Text auf der Suchleiste "1" und Sie erhalten auf dem Bildschirm alle Elemente beginnend mit 1, also: 1, 11, 12, 13, 14, 15 etc.

Sobald Sie auf das zweite Element der neuen Liste klicken, erhalten Sie R.layout.11 aber Sie erhalten R.layout.2 grundsätzlich, weil der Code 11 als das zweite Element der Liste mit ID erkennen wird == 1 und nicht der 11. Artikel mit ID == 12.

Offensichtlich geht es nicht nur um den zweiten Artikel, sondern um alle Artikel der gefilterten Liste. Kann mir jemand bei diesem Problem helfen? Hast du eine Idee, wie du es lösen kannst? Ich bin sehr neu für Android App Entwicklung, ich weiß wenig über Java, ich bin nur zu lernen, ich danke Ihnen für Ihre Geduld.

@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(); 
      } 

     } 

    }); 

} 

Antwort

0

Wie wäre die Überprüfung der Wert des Elements geklickt anstatt die ID. Dies funktioniert:

@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(); 
    }