如何在recyclerview 中显示文件内容?
How to show file contents in recyclerview?
你好我正在创建一个读取文件的应用程序,它的内容应该显示在 recyclerview 中,我已经完成了但是只有第一行显示其余行没有显示
我的文件包含如下所示的数据
123
345
567
我使用缓冲 reader 和输入流来读取文件
这是 recyclerAdapter
的 class
public class RecyclerAdapter extends
RecyclerView.Adapter<RecyclerAdapter.Phone> {
List<PhoneNumber> phoneNumbers;
public RecyclerAdapter(List<PhoneNumber> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
@NonNull
@Override
public Phone onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.text,viewGroup,false);
Phone phone = new Phone(view);
return phone;
}
@Override
public void onBindViewHolder(@NonNull Phone phone, int i) {
phone.textView.setText(phoneNumbers.get(i).number);
}
@Override
public int getItemCount() {
return phoneNumbers.size();
}
public class Phone extends RecyclerView.ViewHolder {
TextView textView;
public Phone(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.txt);
}
}
}
这是我的 class
的代码
public class ScheduledFragment extends Fragment {
String[] strings;
RecyclerView listView;
List<PhoneNumber> phoneNumbers;
public ScheduledFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_scheduled, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
listView = view.findViewById(R.id.list);
ReadFile();
initialiseAdapter();
}
private void initialiseAdapter() {
listView.setHasFixedSize(true);
listView.setLayoutManager(new LinearLayoutManager(getContext()));
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(phoneNumbers);
listView.setAdapter(recyclerAdapter);
}
private void ReadFile() {
phoneNumbers = new ArrayList<>();
try {
InputStream inputStream = getActivity().getAssets().open("phone.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
boolean hasNext = true;
while (hasNext) {
String line = bufferedReader.readLine();
phoneNumbers.add(new PhoneNumber(line));
hasNext = line != null;
}
inputStream.close();
} catch (IOException e) {
//log the exception
}
}
}
class PhoneNumber {
String number;
public PhoneNumber() {
}
public PhoneNumber(String number) {
this.number = number;
}
}
我只在 recyclerview 中看到第一行
预期结果:
123
345
567
我得到的结果:
123
尝试改进你的 while,你不需要变量:
while (true) {
String line = bufferedReader.readLine();
if(line == null) {
break;
} else if (line.equals("")) {
phoneNumbers.add(new PhoneNumber("\n"));
/*I'm not sure if you really want "/n" breaks*/
} else {
phoneNumbers.add(new PhoneNumber(line));
}
Log.d("test", line);
}
ps:为了约定,只对 类 使用大写字母,而不是 methods(readFile 不是 ReadFile)
你好我正在创建一个读取文件的应用程序,它的内容应该显示在 recyclerview 中,我已经完成了但是只有第一行显示其余行没有显示
我的文件包含如下所示的数据
123
345
567
我使用缓冲 reader 和输入流来读取文件
这是 recyclerAdapter
的 classpublic class RecyclerAdapter extends
RecyclerView.Adapter<RecyclerAdapter.Phone> {
List<PhoneNumber> phoneNumbers;
public RecyclerAdapter(List<PhoneNumber> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
@NonNull
@Override
public Phone onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.text,viewGroup,false);
Phone phone = new Phone(view);
return phone;
}
@Override
public void onBindViewHolder(@NonNull Phone phone, int i) {
phone.textView.setText(phoneNumbers.get(i).number);
}
@Override
public int getItemCount() {
return phoneNumbers.size();
}
public class Phone extends RecyclerView.ViewHolder {
TextView textView;
public Phone(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.txt);
}
}
}
这是我的 class
的代码public class ScheduledFragment extends Fragment {
String[] strings;
RecyclerView listView;
List<PhoneNumber> phoneNumbers;
public ScheduledFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_scheduled, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
listView = view.findViewById(R.id.list);
ReadFile();
initialiseAdapter();
}
private void initialiseAdapter() {
listView.setHasFixedSize(true);
listView.setLayoutManager(new LinearLayoutManager(getContext()));
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(phoneNumbers);
listView.setAdapter(recyclerAdapter);
}
private void ReadFile() {
phoneNumbers = new ArrayList<>();
try {
InputStream inputStream = getActivity().getAssets().open("phone.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
boolean hasNext = true;
while (hasNext) {
String line = bufferedReader.readLine();
phoneNumbers.add(new PhoneNumber(line));
hasNext = line != null;
}
inputStream.close();
} catch (IOException e) {
//log the exception
}
}
}
class PhoneNumber {
String number;
public PhoneNumber() {
}
public PhoneNumber(String number) {
this.number = number;
}
}
我只在 recyclerview 中看到第一行
预期结果:
123
345
567
我得到的结果:
123
尝试改进你的 while,你不需要变量:
while (true) {
String line = bufferedReader.readLine();
if(line == null) {
break;
} else if (line.equals("")) {
phoneNumbers.add(new PhoneNumber("\n"));
/*I'm not sure if you really want "/n" breaks*/
} else {
phoneNumbers.add(new PhoneNumber(line));
}
Log.d("test", line);
}
ps:为了约定,只对 类 使用大写字母,而不是 methods(readFile 不是 ReadFile)