簡體   English   中英

如何在 android 中的 TextView 上設置 Recyclview 項目

[英]How to set Recyclview items on TextView in android

在此處輸入圖像描述

這是我的主屏幕,當我點擊 Select All 復選框然后選中所有復選框並將所有復選框的文本設置在 textView 下方(僅文本)時,我想要。 我成功 select 所有復選框,但無法在文本框上使用單獨的逗號設置文本,在適配器的幫助下,我獲得了整個數據的列表,但無法在主要活動 textview 布局上設置它。 請建議我任何有用的方法來做到這一點。 謝謝。

public class MainActivity extends AppCompatActivity {
CheckBox checkboxAll;
EditText editSearch;
RecyclerView recyclerView;
TextView dataList;
MainAdapter mainAdapter;
DataAdapter dataAdapter;
List<MainModel> list;
List<String> showList = new ArrayList<>();
SharedPreferences sharedPreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sharedPreferences = this.getSharedPreferences("prefs", Context.MODE_PRIVATE);
    recyclerView = findViewById(R.id.recyclerView);
    checkboxAll = findViewById(R.id.checkboxAll);
    dataList = findViewById(R.id.dataList);
    editSearch = findViewById(R.id.editSearch);

    editSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String editValue = String.valueOf(charSequence);
            filter(editValue);

        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

    checkboxAll.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (checkboxAll.isChecked()) {
                mainAdapter.selectAll();
            } else {
                mainAdapter.unselectAll();
            }
        }
    });

    list = new ArrayList<>();
    String[] cityname = getResources().getStringArray(R.array.cityList);

    for (int i = 0; i < cityname.length; i++) {
        MainModel mainModel = new MainModel(false, cityname[i]);
        list.add(mainModel);
    }
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    mainAdapter = new MainAdapter(MainActivity.this, list);
    recyclerView.setAdapter(mainAdapter);
}



private void filter(String searchValue) {
    ArrayList<MainModel> filteredList = new ArrayList<>();
    for (MainModel item : list) {
        if (item.getCityName().toLowerCase().contains(searchValue.toLowerCase())) {
            filteredList.add(item);
        }
    }
    mainAdapter.filterList(filteredList);
}

}

適配器是:-

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {

Context context;
List<MainModel> cityList = new ArrayList<>();
int checkValue = 0;
List<String> allValues;
SharedPreferences sharedPreferences;

public MainAdapter(Context context, List<MainModel> list) {

    sharedPreferences = context.getSharedPreferences("prefs", Context.MODE_PRIVATE);
    this.context = context;
    this.cityList = list;
}

public void selectAll() {
    checkValue = 1;
    notifyDataSetChanged();
}

public void unselectAll() {
    checkValue = 2;
    notifyDataSetChanged();
}

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

    View view = LayoutInflater.from(context).inflate(R.layout.list_items, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MainAdapter.ViewHolder holder, int position) {

    holder.itemName.setText(cityList.get(position).getCityName());

    if (checkValue == 1) {
        holder.itemCheckBox.setChecked(true);

    } else if (checkValue == 2) {
        holder.itemCheckBox.setChecked(false);
    }
}


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

public class ViewHolder extends RecyclerView.ViewHolder {
    CheckBox itemCheckBox;
    TextView itemName;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        itemCheckBox = itemView.findViewById(R.id.itemCheckBox);
        itemName = itemView.findViewById(R.id.itemName);
    }
}

public void filterList(ArrayList<MainModel> filteredList) {
    cityList = filteredList;
    notifyDataSetChanged();
}

}

您可以使用接口來實現它,我在代碼片段下面添加

class MainActivity extends AppCompatActivity implements MainAdapter.MyRecyclerClickListener {


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ...

    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    MainAdapter mainAdapter = new MainAdapter(MainActivity.this, list);
    recyclerView.setAdapter(mainAdapter);

    mainAdapter.setClickListener(this);


}

@Override
public void onAllItemSelected(String text) {
    // set on TextView
}

@Override
public void onAllItemUnSelected(String text) {
    // set on TextView toi clear all previous value
}

}

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {

    private MyRecyclerClickListener myRecyclerClickListener;
    
    public void selectAll() {
        checkValue = 1;
        StringBuilder stringBuilder = new StringBuilder();
        for (MainModel cityModel : cityList) {
            stringBuilder.append(cityModel.getCityName()).append(",");

        }
        myRecyclerClickListener.onAllItemSelected(stringBuilder.toString());
        notifyDataSetChanged();
    }

    public void unselectAll() {
        checkValue = 2;
        myRecyclerClickListener.onAllItemUnSelected("");
        notifyDataSetChanged();
    }
    
    public void  setClickListener(MyRecyclerClickListener myRecyclerClickListener){
        this.myRecyclerClickListener = myRecyclerClickListener
    }


    public  interface MyRecyclerClickListener{
        void onAllItemSelected(String text);
        void onAllItemUnSelected(String text);
    }

}

在選中所有復選框時,您將更新綁定到您的文本視圖的可觀察字段。 您將更新后的字符串發布到該 observable,您應該在文本視圖中看到它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM