2016-07-15 9 views
0

でのフィルタリング私はフィルタリングする入力主演するには、検索アイコンをクリックすると、だから、私は、nullポインタ例外を取得する今、このhttp://www.tutorialsbuzz.com/2015/11/Android-Filter-RecyclerView-Using-SearchView-In-ToolBar.htmlアダプタNULLポインタツールバーsearchview

に示すと同じように私のリストをフィルタ処理しようとしているときon

adapter.setFilter(filteredModelList);

活性

public class CreateMyTeamActivity extends AppCompatActivity implements SearchView.OnQueryTextListener { 

List<MessageData> messageDataList = new ArrayList<MessageData>(); 

private RecyclerView mRecyclerView; 
private CustomRecyclerAdapterCreateTeam adapter; 


ListView usersListView; 
Context context; 

private static final String TAG = "MyActivity"; 

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

    context = this; 

    mRecyclerView = (RecyclerView) findViewById(R.id.recycleView); 

    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
    mRecyclerView.setLayoutManager(linearLayoutManager); 




    MessageData msg1 = new MessageData(); 
    msg1.setName("Anant Kharod"); 
    msg1.setImage(R.drawable.msgone); 

    MessageData msg2 = new MessageData(); 
    msg2.setName("Adil"); 
    msg2.setImage(R.drawable.msgthree); 

    messageDataList.add(msg1); 
    messageDataList.add(msg2); 

    Log.i(TAG, "Message: " + msg1); 

    //arrMessageData.add(msg1); 

    CustomRecyclerAdapterCreateTeam adapter = new CustomRecyclerAdapterCreateTeam(this,messageDataList); 
    mRecyclerView.setAdapter(adapter); 




} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_team, menu); 

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

    MenuItemCompat.setOnActionExpandListener(item, 
      new MenuItemCompat.OnActionExpandListener() { 
       @Override 
       public boolean onMenuItemActionCollapse(MenuItem item) { 
        // Do something when collapsed 


        ///HERE IS THE PROBLEM 
        adapter.setFilter(messageDataList); 




        return true; // Return true to collapse action view 
       } 

       @Override 
       public boolean onMenuItemActionExpand(MenuItem item) { 
        // Do something when expanded 
        return true; // Return true to expand action view 
       } 
      }); 
    return super.onCreateOptionsMenu(menu); 


} 

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

@Override 
public boolean onQueryTextChange(String newText) { 
    final List<MessageData> filteredModelList = filter(messageDataList, newText); 
    adapter.setFilter(filteredModelList); 
    return true; 
} 

private List<MessageData> filter(List<MessageData> models, String query) { 
    query = query.toLowerCase(); 

    final List<MessageData> filteredModelList = new ArrayList<>(); 
    for (MessageData model : models) { 
     final String text = model.getName().toLowerCase(); 
     if (text.contains(query)) { 
      filteredModelList.add(model); 
     } 
    } 
    return filteredModelList; 
} 

アダプタ:

public class CustomRecyclerAdapterCreateTeam extends RecyclerView.Adapter<ListViewRowHolder>{ 


private List<MessageData> messageDataList; 
private Context context; 

public CustomRecyclerAdapterCreateTeam(Context context, List<MessageData> messageDataList){ 
    this.messageDataList = messageDataList; 
    this.context = context; 
} 


@Override 
public ListViewRowHolder onCreateViewHolder(final ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.create_team_list_item, null); 

    ListViewRowHolder holder = new ListViewRowHolder(v); 
    return holder; 
} 

@Override 
public void onBindViewHolder(ListViewRowHolder holder, int position) { 

    MessageData messageData = messageDataList.get(position); 

    holder.person.setText(messageData.getName()); 
    holder.pic.setImageResource(messageData.getImage()); 

} 

@Override 
public int getItemCount() { 
    return messageDataList.size(); 
} 

public void setFilter(List<MessageData> messageModels) { 
    messageDataList = new ArrayList<>(); 
    messageDataList.addAll(messageModels); 
    notifyDataSetChanged(); 
} 

}

ListviewRowholder

public class ListViewRowHolder extends RecyclerView.ViewHolder { 

public ImageView pic; 
public TextView person; 

public ListViewRowHolder(View itemView) { 
    super(itemView); 

    this.pic = (ImageView) itemView.findViewById(R.id.teamImage); 
    this.person = (TextView) itemView.findViewById(R.id.teamName); 
} 

public void bind(MessageData messageModel) { 
    this.pic.setImageResource(messageModel.getImage()); 
    this.person.setText(messageModel.getName()); 
} 

}

モデル

public class MessageData { 


    String message = ""; 
    boolean isRead = false; 
    int images; 
    String name = ""; 
    String subject = ""; 
    String type = ""; 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public boolean isRead() { 
     return isRead; 
    } 

    public void setRead(boolean isRead) { 
     this.isRead = isRead; 
    } 

    public void setImage (int images){ 
     this.images = images; 
    } 

    public int getImage(){ 
     return images; 
    } 

    public String getName(){ 
     return name; 
    } 
    public void setName(String name){ 
     this.name = name; 
    } 

    public String getSubject(){ 
     return subject; 
    } 
    public void setSubject(String subject){ 
     this.subject = subject; 
    } 

    public String getType(){ 
     return type; 
    } 

    public void setType(String type){ 
     this.type = type; 
    } 

} 

答えて

1

あなたが宣言したグローバル変数

private CustomRecyclerAdapterCreateTeam adapter; 

いますが、アダプタのローカル変数の初期化されています

CustomRecyclerAdapterCreateTeam adapter = new CustomRecyclerAdapterCreateTeam(this,messageDataList); 

とをので、あなたがグローバルadapterインスタンスにアクセスしようとすると、 nullを返します。このような

変更の初期化:

adapter = new CustomRecyclerAdapterCreateTeam(this,messageDataList); 
関連する問題