2016-05-07 3 views
0

Ich versuche, die Searchview-Funktion davon zu nehmen: github.com/Wrdlbrnft/Searchable-RecyclerView-Demo (kann nicht mehr als 2 Links, sorry)Android - Suche ist nicht repopulierende Ergebnisse/Liste nach Backspacing

ich habe versucht, es zu einem Projekt hinzuzufügen. Wenn ich dies tue, werden meine Ergebnisse jedoch gefiltert, aber sie werden nicht hinzugefügt, wenn ein Benutzer Änderungen oder Backspaces durchführt.

Der Code ist in der Nähe identisch. Ich habe nichts mit dem Adapter geändert.

CustomAdapter.java public class CustomAdapter RecyclerView.Adapter erstreckt {

// Dataset = list of players and their attributes 
private final ArrayList<PlayerData> dataSet; 
private final List<PlayerData> filteredList; 
private ArrayList<PlayerData> originalItems; 
public static class MyViewHolder extends RecyclerView.ViewHolder { 

    TextView textViewName; 
    TextView textViewPos; 
    ImageView imageViewFace; 
    ImageView imageTeamLogo; 
    TextView textViewTeam; 

    public MyViewHolder(View itemView) { 
     super(itemView); 
     this.textViewName = (TextView) itemView.findViewById(R.id.textViewName); 
     this.textViewPos = (TextView) itemView.findViewById(R.id.textViewPos); 
     this.imageViewFace = (ImageView) itemView.findViewById(R.id.imageViewFace); 
     this.imageTeamLogo = (ImageView) itemView.findViewById(R.id.ImgTeamLogo); 
     this.textViewTeam = (TextView) itemView.findViewById(R.id.textViewTeam); 

    } 
} 
//dataset = data from Main Activity 
public CustomAdapter(ArrayList<PlayerData> data) { 
    this.dataSet = data; 
    this.filteredList = data; 

} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, 
             int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.cards_layout, parent, false); 

    MyViewHolder myViewHolder = new MyViewHolder(view); 

    return myViewHolder; 
} 

@Override 
public void onBindViewHolder(final MyViewHolder holder, final int Position) { 
    // called everytime user scrolls up or down 
    TextView textViewName = holder.textViewName; 
    TextView textViewPos = holder.textViewPos; 
    ImageView imageViewFace = holder.imageViewFace; 
    ImageView imageViewLogo = holder.imageTeamLogo; 
    TextView textViewTeam = holder.textViewTeam; 


    textViewName.setText(dataSet.get(Position).getName()); 

    textViewPos.setText(dataSet.get(Position).getPos()); 

    textViewTeam.setText(dataSet.get(Position).getTeam()); 




    Context context = imageViewFace.getContext(); 
    Context context2 = imageViewLogo.getContext(); 

    Picasso.with(context) 
      .load(dataSet.get(Position).getFace()) 
      .placeholder(R.drawable.ic_launcher) 
      .error(R.drawable.ic_3d_rotation) 
      .into(holder.imageViewFace); 

    Glide.with(context2).load(dataSet.get(Position).getTeamLogo()).into(holder.imageTeamLogo); 
} 

@Override 
public int getItemCount() { 
    return dataSet.size(); 
} 
public void animateTo(ArrayList<PlayerData> players) { 
    //checks what query found and adds/removes results 
    // problem is, it is not adding back results 
    applyAndAnimateRemovals(players); 
    applyAndAnimateAdditions(players); 
    applyAndAnimateMovedItems(players); 

} 

private void applyAndAnimateRemovals(ArrayList<PlayerData> newPlayers) { 
    for (int i = dataSet.size() - 1; i >= 0; i--) { 
     final PlayerData player = dataSet.get(i); 
     if (!newPlayers.contains(player)) { 
      removeItem(i); 
     } 
    } 
} 

private void applyAndAnimateAdditions(ArrayList<PlayerData> newPlayers) { 
    for (int i = 0, count = newPlayers.size(); i < count; i++) { 
     final PlayerData player = newPlayers.get(i); 
     if (!dataSet.contains(player)) { 
      addItem(i, player); 
     } 
    } 
} 


private void applyAndAnimateMovedItems(ArrayList<PlayerData> newPlayers) { 
    for (int toPosition = newPlayers.size() - 1; toPosition >= 0; toPosition--) { 
     final PlayerData player = newPlayers.get(toPosition); 
     final int fromPosition = dataSet.indexOf(player); 
     if (fromPosition >= 0 && fromPosition != toPosition) { 
      moveItem(fromPosition, toPosition); 
     } 
    } 
} 

public PlayerData removeItem(int position) { 
     final PlayerData player = dataSet.remove(position); 
     notifyItemRemoved(position); 

     return player; 
    } 
    public void addItem(int position, PlayerData player) { 
     dataSet.add(position, player); 
     // this code is not working for whatever reason) 
     notifyItemInserted(position); 


    } 

    public void moveItem(int fromPosition, int toPosition) { 
     final PlayerData player = dataSet.remove(fromPosition); 
     dataSet.add(toPosition, player); 
     notifyItemMoved(fromPosition, toPosition); 
    } 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity implements SearchView.OnQueryTextListener{ 

private static RecyclerView recyclerView; 
private static CustomAdapter adapter; 
private static ArrayList<PlayerData> data; 





private RecyclerView.LayoutManager layoutManager; 

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


    recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
    recyclerView.setHasFixedSize(true); 

    layoutManager = new LinearLayoutManager(this); 
    recyclerView.setLayoutManager(layoutManager); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 

    data = new ArrayList<PlayerData>(); 


    addPlayers(); 
    adapter = new CustomAdapter(data); 

    recyclerView.setAdapter(adapter); 


} 


public interface Constants { 
    String LOG = "com.vogella.testapp"; 
} 
private void addPlayers() { 

    PlayerData player = new PlayerData("Chris Smith", "#", R.drawable.auser, R.drawable.aquestion, "First", 0); 
    data.add(0,player); 
    player = new PlayerData("Bobby Richars","#", R.drawable.auser, R.drawable.aquestion, "Second", 9); 
      data.add(player); 
    player = new PlayerData("Steven Williams", "#", R.drawable.auser, R.drawable.aquestion, "Third", 1); 
    data.add(player); 


    player = new PlayerData("Tony Lloyd", "#", R.drawable.auser, R.drawable.aquestion, "Fourth", 2); 
    data.add(player); 

    player = new PlayerData("Henry Gates", "#", R.drawable.auser,R.drawable.aquestion, "Fifth", 3); 
    data.add(player); 

    player = new PlayerData("Robert Marks", "#", R.drawable.auser, R.drawable.aquestion, "Sixth", 4); 
    data.add(player); 


    player = new PlayerData("Edward Jackson", "#", R.drawable.auser, R.drawable.aquestion, "SEVENTH", 5); 
    data.add(player); 

    player = new PlayerData("Zack Jordan", "#", R.drawable.auser, R.drawable.aquestion, "Eighth", 6); 
    data.add(player); 

    player = new PlayerData("Christopher Thomas", "#", R.drawable.auser, R.drawable.aquestion, "Ninth", 7); 
    data.add(player); 

    player = new PlayerData("Bruce Allen", "#", R.drawable.auser, R.drawable.aquestion, "Tenth", 8); 
    data.add(player); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    final MenuItem item = menu.findItem(R.id.action_search); 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 
    searchView.setOnQueryTextListener(this); 
    return true; 

} 
@Override 
public boolean onQueryTextChange(String query) { 
    final ArrayList<PlayerData> filteredModelList = filter(data, query); 
    adapter.animateTo(filteredModelList); 
    recyclerView.scrollToPosition(0); 
    return false; 
} 

@Override 
public boolean onQueryTextSubmit(String query) { 
    return false; 
} 

private ArrayList<PlayerData> filter(ArrayList<PlayerData> players, String query) { 
    query = query.toLowerCase(); 

    final ArrayList<PlayerData> filteredModelList = new ArrayList<>(); 
    for (PlayerData player : players) { 
     final String text = player.getName().toLowerCase() + player.getPos().toLowerCase()+ player.getTeam().toLowerCase(); 
     if (text.contains(query)) { 
      filteredModelList.add(player); 
     } 
    } 
    return filteredModelList; 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    super.onOptionsItemSelected(item); 
    return true; 
} 

}

Antwort

0

Es stellt sich heraus, dass es ein kleiner Fehler war .

Individuelle Adapter

public CustomAdapter(ArrayList<PlayerData> data) { 
this.dataSet = data; 
this.filteredList = data; 

}

in

public CustomAdapter(ArrayList<PlayerData> data) { 
    this.dataSet = new ArrayList<>(data); 

dass gerade entfernt und es funktioniert.