【问题标题】:android Recycler View not showing Items but they are thereandroid Recycler View 不显示项目,但它们在那里
【发布时间】:2020-12-07 16:18:30
【问题描述】:

我正在为我的自我创建朋友制作一个练习应用程序,在我的应用程序中描述我的自我,并将他们的头像作为图像视图和名称,昵称作为文本视图,它接受对象,但它从不在 recyclerview 上显示任何内容 请帮忙!

我的主要活动.java

package rex.MyFriends;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener;

import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

public class MainActivity extends AppCompatActivity {
    FloatingActionButton btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView view = findViewById(R.id.elementsview);
        btn = (FloatingActionButton) findViewById(R.id.newfbtn);
        view.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
        view.setAdapter(new Friendsadapter(this));
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getBaseContext(),FriendsAdder.class));

            }
        });
    }
}

我的 FriendAdder 活动

package rex.MyFriends;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class FriendsAdder extends AppCompatActivity {
    TextView name,nickname;
    Button add ,selectimage;
    ImageView image;
    String imgpath;
    private static final int SELECT_IMAGE = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.friendsadder);
        name = findViewById(R.id.name);
        nickname = findViewById(R.id.nickname);
        add = findViewById(R.id.add);
        selectimage = findViewById(R.id.selimg);
        image = findViewById(R.id.disimg);

        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(name.toString().isEmpty() || nickname.toString().isEmpty() || image.getDrawable()==null){
                    Toast.makeText(getBaseContext(),"please fill every thing!",Toast.LENGTH_SHORT).show();
                }
                else{
                    FriendList.addFriend(name.toString(),nickname.toString(),imgpath);
                    finish();
                    Toast.makeText(getBaseContext(),"Friend Added!",Toast.LENGTH_SHORT).show();
                }
            }
        });

        selectimage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent,"Select Your Friends Avatar!"), SELECT_IMAGE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==SELECT_IMAGE && resultCode== Activity.RESULT_OK){
            imgpath= data.getData().getPath();
            Toast.makeText(getBaseContext(),imgpath,Toast.LENGTH_LONG).show();
            image.setImageURI(data.getData());
        }
    }
}

我的适配器类

package rex.MyFriends;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.io.File;


public class Friendsadapter extends RecyclerView.Adapter<Friendsadapter.FriendsHolder> {
    Context context;

    public Friendsadapter(Context context) {
        this.context = context;
    }

    @NonNull
    @Override
    public FriendsHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.friendrow,null,false);
        return new FriendsHolder(view);

    }

    @Override
    public void onBindViewHolder(@NonNull FriendsHolder holder, int position) {
        FriendList.Friend friend = (FriendList.Friend) FriendList.friendlist.get(position);
        holder.nickname.setText(friend.nickname);
        holder.name.setText(friend.name);
        File imgFile = new  File(friend.imgpath);

        if(imgFile.exists()){
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            holder.image.setImageBitmap(myBitmap);
        }
    }

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

public class FriendsHolder extends RecyclerView.ViewHolder {
    TextView name,nickname;
    ImageView image;
    public FriendsHolder(@NonNull View itemView) {
        super(itemView);
        name = itemView.findViewById(R.id.name);
        nickname = itemView.findViewById(R.id.nickname);
        image = itemView.findViewById(R.id.imageView2);
    }
}

}

一个帮助类我用朋友对象的静态数组列表作为一个运行时临时数据库来添加和删除适配器类中使用的朋友来显示

package rex.MyFriends;

import java.util.ArrayList;

public class FriendList {
    public static ArrayList<Friend> friendlist = new ArrayList<>();
    public static class Friend {
        String name;
        String nickname;
        String imgpath ;

        public Friend(String name, String nickname, String imgpath) {
            this.name = name;
            this.nickname = nickname;
            this.imgpath = imgpath;
        }
    }

    public static void addFriend(String name, String nickname, String imgpath){
        Friend friend = new Friend(name,nickname,imgpath);
        friendlist.add(friend);
    }

    public int getSize(){
        return friendlist.size();
    }

    public Friend getFriend(int position){
        return friendlist.get(position);
    }

}

【问题讨论】:

  • 添加好友后,您需要在适配器上拨打notifyDataSetChanged()

标签: java android android-studio android-recyclerview


【解决方案1】:

处理 RecyclerView 的位置adapterName.notifyDataSetChanged (); 您需要运行。 在您的情况下,数据是静态收集的。处理数据的地方是不同的Activity。 切换到新屏幕并添加数据后,如果您希望相关数据在您回来时出现,则需要在 onResume 中更新您的适配器。 Recyclerview 将显示为空白,因为其初始状态没有数据。

@Override
public void onResume() {
    super.onResume();
    adapter.notifyDataSetChanged();
}

【讨论】:

  • 它的一部分不再是空白了,但是昵称的名称和类路径的名称正在出现,如 androidx.appcompat.widget.appcompatedittext
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 2023-02-07
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
相关资源
最近更新 更多