1. 界面设计
2. Holder设计
3. Adapter类
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<Word> allWords = new ArrayList<>();
private boolean userCardView;
MyAdapter(boolean userCardView) {
this.userCardView = userCardView;
}
void setAllWords(List<Word> allWords) {
this.allWords = allWords;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View itemView;
if (userCardView) {
itemView = layoutInflater.inflate(R.layout.cell_card, parent, false);
} else {
itemView = layoutInflater.inflate(R.layout.cell_normal, parent, false);
}
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Word word = allWords.get(position);
holder.textViewNumber.setText(String.valueOf(position+1));
holder.textViewEnglish.setText(word.getWord());
holder.textViewChinese.setText(word.getChineseMeaning());
holder.itemView.setOnClickListener(v -> {
Uri uri = Uri.parse("http://m.youdao.com/dict?le=eng&q=" + word.getWord());
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
holder.itemView.getContext().startActivity(intent);
});
}
@Override
public int getItemCount() {
return allWords.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView textViewNumber, textViewEnglish, textViewChinese;
MyViewHolder(@NonNull View itemView) {
super(itemView);
textViewNumber = itemView.findViewById(R.id.textViewNumber);
textViewEnglish = itemView.findViewById(R.id.textViewEnglish);
textViewChinese = itemView.findViewById(R.id.textViewChinese);
}
}
}
4. 在activity中使用
public class MainActivity extends AppCompatActivity {
Button btnInsert, btnClear;
WordViewModel wordViewModel;
RecyclerView recyclerView;
MyAdapter myAdapter1, myAdapter2;
Switch aSwitch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
btnInsert = findViewById(R.id.btnInsert);
btnClear = findViewById(R.id.btnClear);
aSwitch = findViewById(R.id.switch1);
wordViewModel = new ViewModelProvider(this).get(WordViewModel.class);
myAdapter1 = new MyAdapter(false);
myAdapter2 = new MyAdapter(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(myAdapter1);
aSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (isChecked) {
recyclerView.setAdapter(myAdapter2);
} else {
recyclerView.setAdapter(myAdapter1);
}
});
wordViewModel.getAllWordsLive().observe(this, words -> {
myAdapter1.setAllWords(words);
myAdapter2.setAllWords(words);
myAdapter1.notifyDataSetChanged();
myAdapter2.notifyDataSetChanged();
});
btnInsert.setOnClickListener(v -> {
String[] english = {
"odor",
"wholly",
"turbine",
"throne",
"tension",
"transient",
"sly",
"screw",
"rot",
"retrieve"
};
String[] chinese = {
"气味,名声",
"完全的,全部",
"汽轮机",
"王位",
"张力",
"短暂的",
"狡猾的",
"拧",
"荒唐",
"重新得到"
};
for (int i = 0; i < english.length; i++) {
wordViewModel.insertWords(new Word(english[i], chinese[i]));
}
});
btnClear.setOnClickListener(v -> {
wordViewModel.deleteAllWords();
});
}
}