0

회 전자를 사용하여 항목을 선택하고 새로 고칩니다.회 전자 항목을 사용할 때 어댑터가 새로 고쳐지지 않습니다.

예 : 전체를 선택하면 모든 항목이 표시됩니다. "Sell In"을 선택하면 항목에 대한 판매 만 표시됩니다. 따라서 스피너 선택에 따라 항목이 필터링되어 표시되어야합니다.

필터링을 시도했지만 제외하지 않았습니다. 어댑터가 항목을 새로 고치지 않습니다.

다음은 코드입니다.

MainActivity :

public class Activities extends BaseActivity { 
    private RecyclerView recyclerView; 
    private Spinner spinner; 
    String[] countriesList = {"All", "Sell In", "Registrasi", "Re-Registrasi"}; 
    ActivitiesListAdapter adapter; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     contentView = inflater.inflate(R.layout.activity_activities_list, null); 
     insertPoint.addView(contentView); 
     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
     spinner = (Spinner) findViewById(R.id.spinner); 
     adapter = new ActivitiesListAdapter(getData(), this); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, OrientationHelper.VERTICAL, false); 
     recyclerView.setLayoutManager(linearLayoutManager); 
     recyclerView.setNestedScrollingEnabled(false); 
     recyclerView.setAdapter(adapter); 
     CustomSpinnerAdapter customAdapter=new CustomSpinnerAdapter(this,countriesList); 
     spinner.setAdapter(customAdapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
       String items = adapterView.getItemAtPosition(i).toString(); 
       // adapter.getFilter().filter(items); 
       final List<RetailerActivities> filteredModelList2 = adapter.filter2(getData(), items); 
       //adapter.setFilter(filteredModelList2); 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) { 

      } 
     }); 


    } 
//the first item to be compared in Spinner. 
    public static List<RetailerActivities> getData() { 
     List<RetailerActivities> list = new ArrayList<>(); 
     list.add(new RetailerActivities("Sell In", "Selli Cell", "13/06/2017 09:10", R.drawable.ic_tag)); 
     list.add(new RetailerActivities("Registrasi", "Farras Cell", "13/06/2017 09:10", R.drawable.ic_registrasi)); 
     list.add(new RetailerActivities("Re-Registrasi", "Farras Cell", "13/06/2017 09:10", R.drawable.ic_registrasi)); 
     list.add(new RetailerActivities("POSM & Visibility", "Farras Cell", "13/06/2017 09:10", R.drawable.ic_poms)); 
     list.add(new RetailerActivities("Sell In", "Selli Cell", "13/06/2017 09:10", R.drawable.ic_tag)); 
     return list; 
    } 

어댑터 클래스

public class ActivitiesListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    private List<RetailerActivities> mList; 
    private Context context; 
    private List<RetailerActivities> mFilteredList; 

    public ActivitiesListAdapter(List<RetailerActivities> list, Context context) { 
     this.mFilteredList = this.mList = list; 
     this.context = context; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view; 
     view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activities_row, parent, false); 
     return new RetailerActivitiesView(view); 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     RetailerActivities object = mList.get(position); 
     //RetailerActivities retailerFilter = mFilteredList.get(position); 
     ((RetailerActivitiesView) holder).title.setText(object.getTitle()); 
     ((RetailerActivitiesView) holder).name.setText(object.getName()); 
     ((RetailerActivitiesView) holder).dateTime.setText(object.getDateTime()); 
     ((RetailerActivitiesView) holder).profileIcon.setImageResource(object.getDrawablesIcon()); 

    } 

    @Override 
    public int getItemCount() { 
     if (mList == null) 
      return 0; 
     return mList.size(); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (mList != null) { 
      RetailerActivities object = mList.get(position); 
      if (object != null) { 
       //return object.getType(); 
      } 
     } 
     return 0; 
    } 



    public static class RetailerActivitiesView extends RecyclerView.ViewHolder { 
     private ImageView profileIcon; 
     private TextView title; 
     private TextView name; 
     private TextView dateTime; 

     public RetailerActivitiesView(View itemView) { 
      super(itemView); 
      title = (TextView) itemView.findViewById(R.id.recycle_txt_acc_num); 
      name = (TextView) itemView.findViewById(R.id.recycle_txt_acc_name); 
      dateTime = (TextView) itemView.findViewById(R.id.timestamp); 
      profileIcon = (ImageView) itemView.findViewById(R.id.recycle_profile); 
     } 
    } 
    public List<RetailerActivities> filter2(List<RetailerActivities> models, String filterType) { 

     final ArrayList<RetailerActivities> filteredModelList = new ArrayList<>(); 
     for (RetailerActivities model:models) { 
      final String cardTypeTest = model.getTitle(); //title is //where i need to compare from the spinner string.. 

      if (cardTypeTest.equalsIgnoreCase(filterType)) { 
       filteredModelList.add(model); 
      } 
     } 
     return filteredModelList; 
    } 
} 
+0

회 전자 항목을 선택한 경우 어디에서 결과를 표시 하시겠습니까? –

+0

예 @vikaskumar 답변을 편집했습니다. 당신이 지금 그것을 얻을 수 있기를 바랍니다. 드롭 다운에서 값을 선택하면 어댑터를 필터링해야합니다. – Shiv

답변

0

당신은 이런 식으로) 방법을 adapter.notifyDataSetChanged를 (둘 필요가 :

@Override 
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
    String items = adapterView.getItemAtPosition(i).toString(); 
    // adapter.getFilter().filter(items); 
    final List<RetailerActivities> filteredModelList2 = adapter.filter2(getData(), items); 
    //adapter.setFilter(filteredModelList2); 
    adapter.notifyDataSetChanged();//Put this line. 
} 
+0

정확히 여기에서 사용했습니다. 그러나 여전히 목록은 상쾌하지 않습니다. – Shiv

+0

filter2() 메소드가 맞습니까? – Shiv

+0

filter2()는 정확하지만 스피너 항목에서 "filteredModelList2"의 사용법은 무엇입니까? –

1

코드를 사용해보십시오.

동일한 스피너에 대해 ** 어댑터OnItemSelectedListener()을 구현했습니다. 그래서 First Lister 만 항상 일할 것입니다.

MainActivity :

public class Activities extends BaseActivity { 
    private RecyclerView recyclerView; 
    private Spinner spinner; 
    String[] countriesList = {"All", "Sell In", "Registrasi", "Re-Registrasi"}; 
    ActivitiesListAdapter adapter; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     contentView = inflater.inflate(R.layout.activity_activities_list, null); 
     insertPoint.addView(contentView); 
     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
     spinner = (Spinner) findViewById(R.id.spinner); 
     adapter = new ActivitiesListAdapter(getData(), this); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, OrientationHelper.VERTICAL, false); 
     recyclerView.setLayoutManager(linearLayoutManager); 
     recyclerView.setNestedScrollingEnabled(false); 
     recyclerView.setAdapter(adapter); 

/* YOU HAD IMPLIMENTED 2 ADAPTERS FOR SPINNER. SO ONLY FIRST OnItemSelectedListener() WILL LISTEN ALWAYS */ 

     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, R.layout.acitivity_detail_profile_retailer, countriesList); 
     dataAdapter.setDropDownViewResource(R.layout.spinner_drop_down); 
     spinner.setAdapter(dataAdapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
       String items = adapterView.getItemAtPosition(i).toString(); 
       // adapter.getFilter().filter(items); 
       final List<RetailerActivities> filteredModelList2 = adapter.filter2(getData(), items); 
       adapter.notifyDataSetChanged(); 
       //adapter.setFilter(filteredModelList2); 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) { 

      } 
     }); 


    } 
//the first item to be compared in Spinner. 
    public static List<RetailerActivities> getData() { 
     List<RetailerActivities> list = new ArrayList<>(); 
     list.add(new RetailerActivities("Sell In", "Selli Cell", "13/06/2017 09:10", R.drawable.ic_tag)); 
     list.add(new RetailerActivities("Registrasi", "Farras Cell", "13/06/2017 09:10", R.drawable.ic_registrasi)); 
     list.add(new RetailerActivities("Re-Registrasi", "Farras Cell", "13/06/2017 09:10", R.drawable.ic_registrasi)); 
     list.add(new RetailerActivities("POSM & Visibility", "Farras Cell", "13/06/2017 09:10", R.drawable.ic_poms)); 
     list.add(new RetailerActivities("Sell In", "Selli Cell", "13/06/2017 09:10", R.drawable.ic_tag)); 
     return list; 
    } 
+0

여전히 회 전자를 통해 필터링하기 위해 채울 수 없습니다 – Shiv

+0

추가'adapter.notifyDataSetChanged(); ''adapter.filter2()'를 호출 한 후. 코드에 변경 사항을 추가해야했습니다. –

1

목록에 새 항목을 입력 한 후 (어댑터 mListAdapter.notifyDataSetChanged이 코드를 추가)

List<RetailerActivities> list = new ArrayList<>(); 
list= getData(); 
    recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
     spinner = (Spinner) findViewById(R.id.spinner); 
     adapter = new ActivitiesListAdapter(list, this);// set value here..... 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, OrientationHelper.VERTICAL, false); 
     recyclerView.setLayoutManager(linearLayoutManager); 
     recyclerView.setNestedScrollingEnabled(false); 
     recyclerView.setAdapter(adapter); 

public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) 
{ 
    String items = adapterView.getItemAtPosition(i).toString(); 
    list = getFilteredData();// get data based on condition 
    adapter.notifyDataSetChanged(); 
} 
+0

어디에 추가해야합니까? @rashmi ranjan – Shiv

+0

"Sell In"을 선택하면 변수 (예 : 목록)의 항목에서 sell 값이 표시됩니다. 그런 다음 목록을 어댑터로 설정하고 위의 코드를 추가하십시오. –

0

이이 문제에 대한 정확한 코드가 아닙니다, 나는 내 자신의 솔루션을 게시 한 ... 트리거

public class RecyclerViewAdapter extends RecyclerView.Adapter<ViewHolder> { 

    View view1; 
    ViewHolder viewHolder1; 
    Activity act; 
    List<UserTask> userTask; 
    private int mSelectedPosition; 
    private View mSelectedView; 

    public RecyclerViewAdapter(Activity act, List<UserTask> userTask) { 
     this.userTask = userTask; 
     this.act = act; 
    } 


    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     view1 = LayoutInflater.from(HomeScreen.this).inflate(R.layout.recyclerview_items, parent, false); 

     viewHolder1 = new ViewHolder(view1); 

     return viewHolder1; 
    } 

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

     holder.textView.setText(userTask.get(position).getTaskName()); 
     holder.tvSpinnerText.setText(userTask.get(position).getChangedInstanceCount()); 
     holder.llSpinner.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setAlertDialog(userTask.get(position).getInstancesArray(), holder, position); 
       // recyclerView.smoothScrollToPosition(position); 

      } 
     }); 
    } 

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

} 

방법 논리에서 찾아보세요 때 회 전자의 클릭 ..

private void setAlertDialog(Integer[] values, final ViewHolder view, final int position) { 

    AlertDialog.Builder builder = new AlertDialog.Builder(HomeScreen.this); 

    final String[] instances = Arrays.toString(values).split("[\\[\\]]")[1].split(", "); 
    builder.setItems(instances, new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      view.tvSpinnerText.setText(instances[which]); 
      userTask.get(position).setChangedInstanceCount(instances[which]); 
      // dialog.dismiss(); 

      reset(position); 
     } 

    }); 
    builder.show(); 
}