2016-09-09 4 views
-2

Wenn ich meine Listenansicht filtere und auf das Element klicke, bekomme ich falsche Daten .. es werden immer die ersten Daten auf der Liste angezeigt.Wenn ich meine Listenansicht filtere und auf das Element klicke, erhalte ich falsche Daten

public class DisplayActivity extends Activity { 

private DbHelper mHelper; 
private ArrayList<String> listall; 
private ArrayAdapter<String> userAdapter; 
private ListView obj; 
private EditText edt; 
private ArrayAdapter<String> arrayAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.display_activity); 
    mHelper = new DbHelper(this); 
    final ArrayList<String> array_list = mHelper.getAllFriends(); 
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array_list); 

    edt = (EditText) findViewById(R.id.editText); 
    obj = (ListView) findViewById(R.id.List); 
    obj.setTextFilterEnabled(true); 
    obj.setAdapter(arrayAdapter); 

    obj.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
      // TODO Auto-generated method stub 

     int id_To_Search = position + 1; 
      String id = String.valueOf(id_To_Search); 
      Intent i = new Intent(DisplayActivity.this, EditFriends.class); 
      i.putExtra("id", id); 
      startActivity(i); 
     } 
    }); 

    edt.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) { 
       arrayAdapter.getFilter().filter(s.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    }); 
} 

    @Override 
    public void onResume() { 
     super.onResume(); 

    if (arrayAdapter != null) { 
     arrayAdapter.notifyDataSetChanged(); 
     arrayAdapter.notifyDataSetInvalidated(); 
    } 
} 
+0

Warum in onResume() notifyDataSetChanged()? – XxGoliathusxX

+0

Ich habe kein Problem damit, ich aktualisiere nur mein ArrayAddapter .. –

Antwort

0

Was Sie hier tun, ist die Position aus der aktuellen Liste zu bekommen. Wenn Sie den Filter anwenden, wird Ihre Liste verkürzt und die Daten ändern sich entsprechend. Wenn Sie die gleiche Position wie id in Ihrer ursprünglichen Liste erwarten, werden Sie das nicht bekommen.

1. Sie müssen benutzerdefinierte Array-Adapter mit einer Schnittstelle verwenden.

2. Implementieren Sie diese Schnittstelle in der Aktivität.

3.Pass Aktivitätsobjekt an Adapter.

4.Implement onclick innerhalb des Adapters und übergeben Sie den Aufruf der Schnittstelle Methode mit Aktivität Objekt. Gib auch deine ID weiter. Dann kannst du jetzt die ID in der Aktivität sammeln.

Sie können das Beispiel nehmen von hier Creating custom adapter with listener

Fühlen Sie sich frei zu äußern. Danke

Verwandte Themen