Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.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
Java 使用“循环视图”时,无法在Android Emulator中查看应用程序栏_Java_Android_Android Recyclerview - Fatal编程技术网

Java 使用“循环视图”时,无法在Android Emulator中查看应用程序栏

Java 使用“循环视图”时,无法在Android Emulator中查看应用程序栏,java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在尝试使用安卓碎片设置RecyclerView。我无法在片段中看到应用程序栏。作为概念证明,我创建了100个POJO,我想在我的RecyclerView`中显示它们。我可以看到100个元素,但我无法查看应用程序栏 我不知道我做错了什么。下面是在模拟器中渲染的视图。我使用的是标准的活动API,而不是来自支持库的API 这是我对布局检查器的看法 主题 activity_fragment.xml(回收器视图将添加到此容器) View Holder.java private static c

我正在尝试使用安卓
碎片
设置
RecyclerView
。我无法在片段中看到应用程序栏。作为概念证明,我创建了100个POJO
,我想在我的
RecyclerView`中显示它们。我可以看到100个元素,但我无法查看应用程序栏

我不知道我做错了什么。下面是在模拟器中渲染的视图。我使用的是标准的活动API,而不是来自支持库的API

这是我对布局检查器的看法

主题

activity_fragment.xml(回收器视图将添加到此容器)

View Holder.java

  private static class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    private TextView mCrimeTitle;

    private TextView mCrimeDate;

    private Crime mCrime;

    public CrimeHolder(View view) {
      super(view);
      this.mCrimeTitle = view.findViewById(R.id.crime_title);
      this.mCrimeDate = view.findViewById(R.id.crime_date);
      this.itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
      Toast.makeText(view.getContext(), mCrime.getmTitle() + " clicked!!", Toast.LENGTH_SHORT).show();
    }

    void bind(Crime crime) {
      mCrime = crime;
      mCrimeTitle.setText(mCrime.getmTitle());
      mCrimeDate.setText(mCrime.getmDate().toString());

    }
  }
Adapter.java

  private static class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder> {

    private List<Crime> mCrimes;


    public CrimeAdapter(List<Crime> crimes) {
      this.mCrimes = crimes;
    }

    @NonNull
    @Override
    public CrimeHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
      LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext());
      View view = layoutInflater.inflate(R.layout.list_item_crime, viewGroup, false);
      return new CrimeHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull CrimeHolder crimeHolder, int i) {
      Crime crime = this.mCrimes.get(i);
      crimeHolder.bind(crime);
    }

    @Override
    public int getItemCount() {
      return mCrimes.size();
    }
  }
私有静态类CrimeAdapter扩展了RecyclerView.Adapter{
私人名单;
公共犯罪报告(列出罪行){
这就是犯罪;
}
@非空
@凌驾
public CrimeHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
LayoutInflater LayoutInflater=LayoutInflater.from(viewGroup.getContext());
视图=布局更平坦。充气(R.layout.list\u item\u犯罪,视图组,false);
返回新的CrimeHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull CrimeHolder CrimeHolder,int i){
犯罪=这个.mCrimes.get(i);
捆绑(犯罪);
}
@凌驾
public int getItemCount(){
返回mCrimes.size();
}
}
碎片

public class CrimeListFragment extends Fragment {

  private RecyclerView mRecyclerView;
  private CrimeAdapter mAdapter;

  @Nullable
  @Override
  public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_crime_list, container, false);
    mRecyclerView = view.findViewById(R.id.crime_recycler_view);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    updateUI();
    return view;
  }

  private List<Crime> getCrimes() {

    List<Crime> mCrimes = new ArrayList<>();
    for (int i = 0; i < 100; i++) {
        Crime crime = new Crime();
        crime.setmTitle("Title # :" + i);
        crime.setmSolved(i % 2 == 0);
        mCrimes.add(crime);
    }
    return mCrimes;
  }

  private void updateUI() {
    List<Crime> crimes = getCrimes();
    mAdapter = new CrimeAdapter(crimes);
    mRecyclerView.setAdapter(mAdapter);
  }
}
公共类CrimeListFragment扩展了片段{
私人回收视图mRecyclerView;
私人犯罪;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u crime\u list,container,false);
mRecyclerView=view.findViewById(R.id.crime\u recycler\u视图);
setLayoutManager(新的LinearLayoutManager(getActivity());
updateUI();
返回视图;
}
私人犯罪名单{
List mCrimes=new ArrayList();
对于(int i=0;i<100;i++){
犯罪=新犯罪();
犯罪。setmTitle(“标题:”+i);
犯罪。setmSolved(i%2==0);
mCrimes.add(犯罪);
}
返回mCrimes;
}
私有void updateUI(){
列出罪行=获取罪行();
mAdapter=新的犯罪记录(犯罪);
mRecyclerView.setAdapter(mAdapter);
}
}

我不知道为什么即使您使用DarkActionBar作为父主题,它也不会显示在您的应用程序中。但您可以使用手动添加应用程序栏

您需要:

修改您的清单以确保android不会为您创建应用程序栏

<application
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    ...

如果您将主活动更改为AppCompatActivity,您将获得actionbar,并且不需要fragment_crime_list.xml中的paddingTop。我猜问题是你把一个普通的活动和一个AppCompat主题结合起来了

(我试过了)


你在真实设备上试用过吗?@Frandall我没有安卓设备。我正在模拟器中测试。你的问题已经解决了吗?@Frandall我已经有一段时间没有看这个问题了。有人解决了这个问题。我将查看github提交SHA,并让您知道我应该将工具栏定义、活动布局还是片段布局添加到哪个布局?活动布局在棒棒糖之前的sdk版本中,我无法调用“setSupportActionBar”。我不支持图书馆。我使用的是标准的活动API。如果你使用标准的活动,请确保你的min SDK是API 21(android 5.0 Lolipop),因为工具栏是从该API添加的。我是android新手。我不明白你在说什么。你能详细说明一下吗?AppCompatActivity是一个更新版本的Activity,你应该改用它。如果您将主活动中的这一行切换到
公共类CrimeStativity extends AppCompatActivity
,它应该可以解决您的问题。在build.gradle中,如果您尚未使用它,您可能还必须添加类似于
implementation'com.android.support:appcompat-v7:27.1.1'
的内容。
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/crime_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="?attr/actionBarSize"/>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="8dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/crime_title"
        android:text="@string/crime_title_hint"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/crime_date"
        android:text="@string/crime_date"/>

</LinearLayout>
public class Crime {


    private final UUID mId;

    private String mTitle;

    private final Date mDate;

    private boolean mSolved;

    public Crime() {
        this.mId = UUID.randomUUID();
        this.mDate = new Date();
    }

    public UUID getmId() {
        return mId;
    }

    public String getmTitle() {
        return mTitle;
    }

    public void setmTitle(String mTitle) {
        this.mTitle = mTitle;
    }

    public Date getmDate() {
        return mDate;
    }

    public boolean ismSolved() {
        return mSolved;
    }

    public void setmSolved(boolean mSolved) {
        this.mSolved = mSolved;
    }
}
  private static class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    private TextView mCrimeTitle;

    private TextView mCrimeDate;

    private Crime mCrime;

    public CrimeHolder(View view) {
      super(view);
      this.mCrimeTitle = view.findViewById(R.id.crime_title);
      this.mCrimeDate = view.findViewById(R.id.crime_date);
      this.itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
      Toast.makeText(view.getContext(), mCrime.getmTitle() + " clicked!!", Toast.LENGTH_SHORT).show();
    }

    void bind(Crime crime) {
      mCrime = crime;
      mCrimeTitle.setText(mCrime.getmTitle());
      mCrimeDate.setText(mCrime.getmDate().toString());

    }
  }
  private static class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder> {

    private List<Crime> mCrimes;


    public CrimeAdapter(List<Crime> crimes) {
      this.mCrimes = crimes;
    }

    @NonNull
    @Override
    public CrimeHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
      LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext());
      View view = layoutInflater.inflate(R.layout.list_item_crime, viewGroup, false);
      return new CrimeHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull CrimeHolder crimeHolder, int i) {
      Crime crime = this.mCrimes.get(i);
      crimeHolder.bind(crime);
    }

    @Override
    public int getItemCount() {
      return mCrimes.size();
    }
  }
public class CrimeListFragment extends Fragment {

  private RecyclerView mRecyclerView;
  private CrimeAdapter mAdapter;

  @Nullable
  @Override
  public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_crime_list, container, false);
    mRecyclerView = view.findViewById(R.id.crime_recycler_view);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    updateUI();
    return view;
  }

  private List<Crime> getCrimes() {

    List<Crime> mCrimes = new ArrayList<>();
    for (int i = 0; i < 100; i++) {
        Crime crime = new Crime();
        crime.setmTitle("Title # :" + i);
        crime.setmSolved(i % 2 == 0);
        mCrimes.add(crime);
    }
    return mCrimes;
  }

  private void updateUI() {
    List<Crime> crimes = getCrimes();
    mAdapter = new CrimeAdapter(crimes);
    mRecyclerView.setAdapter(mAdapter);
  }
}
<application
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    ...
<android.support.v7.widget.Toolbar
   android:id="@+id/my_toolbar"
   android:layout_width="match_parent"
   android:layout_height="?attr/actionBarSize"
   android:background="?attr/colorPrimary"
   android:elevation="4dp"
   android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
   app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fragment);
    Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
    setSupportActionBar(myToolbar);
}