Android 如何在片段中访问适配器类textview
这是我的适配器类Android 如何在片段中访问适配器类textview,android,android-fragments,android-recyclerview,Android,Android Fragments,Android Recyclerview,这是我的适配器类 public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyHolder> { List<ListData> listData; public RecyclerViewAdapter(List<ListData> listData) { this.listData = listData; } @Override publ
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyHolder> {
List<ListData> listData;
public RecyclerViewAdapter(List<ListData> listData) {
this.listData = listData;
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false);
return new MyHolder(view);
}
public void onBindViewHolder(MyHolder holder, int position) {
ListData data = listData.get(position);
holder.name.setText(data.getName());
holder.message.setText(data.getMessage());
}
@Override
public int getItemCount() {
return listData.size();
}
class MyHolder extends RecyclerView.ViewHolder {
TextView message, name, badge;
public MyHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.tv_email);
message = itemView.findViewById(R.id.tv_message);
badge = itemView.findViewById(R.id.badge);
}
}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
列表数据;
公共回收服务适配器(列表数据){
this.listData=listData;
}
@凌驾
public MyHolder onCreateViewHolder(视图组父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.card_视图,parent,false);
返回新的MyHolder(视图);
}
公共无效onBindViewHolder(MyHolder,int位置){
ListData data=ListData.get(位置);
holder.name.setText(data.getName());
holder.message.setText(data.getMessage());
}
@凌驾
public int getItemCount(){
返回listData.size();
}
类MyHolder扩展了RecyclerView.ViewHolder{
文本查看消息、姓名、徽章;
公共MyHolder(查看项目视图){
超级(项目视图);
name=itemView.findviewbyd(R.id.tv_电子邮件);
message=itemView.findviewbyd(R.id.tv_消息);
badge=itemView.findViewById(R.id.badge);
}
}
这是我的片段类
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle b) {
View view = inflater.inflate(R.layout.fragment_chats, group, false);
recyclerview = view.findViewById(R.id.rview);
badge = view.findViewById(R.id.badge);
database = FirebaseDatabase.getInstance();
myRef = database.getReference("message");
hashMap = new HashMap<>();
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
list = new ArrayList<>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
UserDetails userdetails = dataSnapshot1.getValue(UserDetails.class);
String name = userdetails.getName();
String nameCaps = name.substring(0, 1).toUpperCase() + name.substring(1);
String message = userdetails.getMessage();
if (hashMap.containsKey(name)) {
if (!hashMap.get(name).equalsIgnoreCase(message))
hashMap.remove(name);
hashMap.put(nameCaps, message);
}
} else
hashMap.put(nameCaps, message)
}
list = convertHashToObjectList(hashMap);
RecyclerViewAdapter recycler = new RecyclerViewAdapter(list);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerview.setLayoutManager(layoutManager);
recyclerview.setItemAnimator(new DefaultItemAnimator());
recyclerview.setAdapter(recycler);
}
@Override
public void onCancelled(DatabaseError error) {
}
});
return view;
}
public View onCreateView(布局、充气机、视图组、束b){
视图=充气机。充气(R.layout.fragment\u chats,group,false);
recyclerview=view.findViewById(R.id.rview);
badge=view.findViewById(R.id.badge);
database=FirebaseDatabase.getInstance();
myRef=database.getReference(“消息”);
hashMap=新的hashMap();
myRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
列表=新的ArrayList();
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
UserDetails UserDetails=dataSnapshot1.getValue(UserDetails.class);
String name=userdetails.getName();
字符串nameCaps=name.substring(0,1).toUpperCase()+name.substring(1);
String message=userdetails.getMessage();
if(hashMap.containsKey(名称)){
if(!hashMap.get(name).equalsIgnoreCase(message))
删除(名称);
hashMap.put(名称上限、消息);
}
}否则
hashMap.put(名称大写、消息)
}
list=convertHashToObjectList(hashMap);
RecycleServiceAdapter recycler=新的RecycleServiceAdapter(列表);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(getContext());
recyclerview.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerview.setAdapter(回收器);
}
@凌驾
已取消的公共无效(DatabaseError错误){
}
});
返回视图;
}
专用ArrayListConvertHashToObject列表(HashMap HashMap){
ArrayList listData=new ArrayList();
for(Map.Entry:hashMap.entrySet()){
添加(新的listData(entry.getKey(),entry.getValue());
}
返回列表数据;
}
我想在fragment类中使用textview标记。如何在片段类中访问适配器类textview。当我在Fragment类中实例化textview时,它显示了错误null对象引用。更新
RecyclerView
中某些项的方法是更新数据集,然后通知适配器数据集已更改
因此,首先需要更新列表中的徽章数据。
然后,您需要通知适配器的更改。这里有一个例子
代码放在适配器内部
public void updateData(List<ListData> newData) {
listData = newData;
notifyDataSetChanged();
}
public void updateData(列出新数据){
listData=新数据;
notifyDataSetChanged();
}
并确保在您的onBindViewHolder()
中设置徽章的值(如果存在)。以下是相同的代码:
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
UserDetails userdetails = dataSnapshot1.getValue(UserDetails.class);
String name = userdetails.getName();
String nameCaps = name.substring(0, 1).toUpperCase() + name.substring(1);
String message = userdetails.getMessage();
if (!updateMessage.containsKey(nameCaps)) {
updateMessage.put(nameCaps,false);
}
if (hashMap.containsKey(name)) {
if (!hashMap.get(name).equalsIgnoreCase(message)) {
hashMap.remove(name);
hashMap.put(nameCaps, message);
updateMessage.put(nameCaps,true);
}
} else
hashMap.put(nameCaps, message);
}
list = convertHashToObjectList(hashMap);
RecyclerViewAdapter recycler = new RecyclerViewAdapter(list,updateMessage);
“updatemessage”是一个hashmap,用于保存消息中的更改。与code共享更多详细信息添加您的代码此处是单击recyclerview中的项目后将显示的片段?否。当您要更新badge textview How use时,我只是在您的片段中从片段类设置文本视图的可见性。请解释我假设你有某种事件更新了你的“徽章”值,对吗?此时,您希望在UI上反映新的值,请向我显示您在何处执行此操作的代码段更新编辑的代码。当新消息从数据库到达时,它会检查用户名,当同一用户发送两次消息时,它会在“回收者”视图中显示其姓名附近的徽章,但当新用户发送消息时,徽章不会显示。如何执行此操作?在我建议答案之前,最后一个问题是,ListData代表什么?留言?还是用户行?每个ListData都能有自己的徽章吗?
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
UserDetails userdetails = dataSnapshot1.getValue(UserDetails.class);
String name = userdetails.getName();
String nameCaps = name.substring(0, 1).toUpperCase() + name.substring(1);
String message = userdetails.getMessage();
if (!updateMessage.containsKey(nameCaps)) {
updateMessage.put(nameCaps,false);
}
if (hashMap.containsKey(name)) {
if (!hashMap.get(name).equalsIgnoreCase(message)) {
hashMap.remove(name);
hashMap.put(nameCaps, message);
updateMessage.put(nameCaps,true);
}
} else
hashMap.put(nameCaps, message);
}
list = convertHashToObjectList(hashMap);
RecyclerViewAdapter recycler = new RecyclerViewAdapter(list,updateMessage);