我不知道问题出在哪里,但我正在尝试制作一个故事应用程序,而且似乎无法使模拟器以与预览相同的方式显示。我使用的是Nexus6模拟器,并在“预览”上预览了所有示例,以查看它们是否有所不同,但它们都显示良好(在预览中)。没有错误显示,没有问题的渐变构建,没有问题的仿真器启动;也许我怀疑custom_view布局可能存在“问题”;我不确定。
logcat错误(我还不知道如何读取logcat,但是这些显示为红色)
2020-10-07 01:48:22.901 1663-1680/system_process E/BluetoothAdapter: Bluetooth binder is null
2020-10-07 01:48:22.902 1663-1680/system_process E/BatteryStatsService: no controller energy info supplied
2020-10-07 01:48:22.909 1663-1680/system_process E/KernelCpuSpeedReader: Failed to read cpu-freq: /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state (No such file or directory)
2020-10-07 01:48:22.909 1663-1680/system_process E/KernelUidCpuTimeReader: Failed to read uid_cputime: /proc/uid_cputime/show_uid_stat (No such file or directory)
2020-10-07 01:48:22.910 1663-1680/system_process E/BatteryStatsService: modem info is invalid: ModemActivityInfo{ mTimestamp=0 mSleepTimeMs=0 mIdleTimeMs=0 mTxTimeMs[]=[0, 0, 0, 0, 0] mRxTimeMs=0 mEnergyUsed=0}
2020-10-07 01:58:00.135 1663-1677/system_process I/ProcessStatsService: Prepared write state in 4ms
custom_view布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0278ae"
android:padding="5dp">
<androidx.cardview.widget.CardView
android:id="@+id/cardView"
android:layout_width="wrap_content"
android:layout_height="141dp"
app:cardCornerRadius="6dp"
app:cardElevation="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="397dp"
android:layout_height="match_parent"
android:padding="5dp">
<ImageView
android:id="@+id/imageView"
android:layout_width="155dp"
android:layout_height="143dp"
android:background="@drawable/quran"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/storyContent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/storyTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sample text"
android:textColor="#51adcf"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.745"
app:layout_constraintStart_toStartOf="@+id/imageView"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.219" />
<TextView
android:id="@+id/storyContent"
android:layout_width="242dp"
android:layout_height="25dp"
android:text="ٍSample story content (dEscription)"
android:textColor="#51adcf"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toBottomOf="@+id/storyTitle" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
适配器类(调用custom_view的地方)
package com.example.taletale;
import androidx.annotation.NonNull;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
private LayoutInflater inflater;
private String[] sTitles;
private String[] sContent;
Adapter(Context context, String[] titles, String[] contents){
this.inflater=LayoutInflater.from(context);
this.sTitles=titles;
this.sContent=contents;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = inflater.inflate(R.layout.custom_view, viewGroup,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewholder, int i) {
String title = sTitles[i];
String content = sContent[i];
viewholder.storyTitle.setText(title);
viewholder.storyContent.setText(content);
}
@Override
public int getItemCount() {
return sTitles.length;
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView storyTitle,storyContent;
public ViewHolder(@NonNull View itemView){
super(itemView);
storyTitle=itemView.findViewById(R.id.storyTitle);
storyContent = itemView.findViewById(R.id.storyContent);
}
}
}
main_activity类
package com.example.taletale;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//get the list of stories, titles and contents, in the stories-array
String[] titles = getResources().getStringArray(R.array.stories_titles);
String[] contents = getResources().getStringArray(R.array.stories__content);
recyclerView = findViewById(R.id.StoriesListView);
adapter = new Adapter(this,titles,contents); //sets adapter to take two string arrays
recyclerView.setAdapter(adapter);
}
}
main_activity布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/StoriesListView"
android:layout_width="409dp"
android:layout_height="729dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>