Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在片段中访问适配器类textview_Android_Android Fragments_Android Recyclerview - Fatal编程技术网

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);