Android Studio 运行应用程序显示项目中不再存在的旧XML布局

qyuhtwio  于 2023-02-19  发布在  Android
关注(0)|答案(1)|浏览(147)

我有一个简单的android项目,我在数据库中填充一个项目列表,为此我使用RecyclerView显示在我的activity_main.xml
这是我的两个(也是仅有的两个)xml文件
activity_main.xml

package com.twocrows.foretoldapp;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.twocrows.foretoldapp.adapter.ChartAdapter;
import com.twocrows.foretoldapp.entity.Chart;
import com.twocrows.foretoldapp.viewmodel.ChartViewModel;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ChartViewModel chartViewModel;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setHasFixedSize(true);

        final ChartAdapter adapter = new ChartAdapter();
        recyclerView.setAdapter(adapter);
        
        chartViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(ChartViewModel.class);
        chartViewModel.getAllCharts().observe(this, new Observer<List<Chart>>() {
            @Override
            public void onChanged(List<Chart> charts) {
                adapter.setCharts(charts);
            }
        });
    }
}

在预览中显示为x1c 0d1x
chart_item.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp">

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="8dp">

    <TextView
        android:id="@+id/text_view_location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:text="location"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium" />

    <TextView
        android:id="@+id/text_view_name"
        android:layout_width="139dp"
        android:layout_height="38dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginEnd="248dp"
        android:layout_marginRight="248dp"
        android:layout_below="@+id/text_view_name"
        android:text="Chart Name"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        tools:ignore="NotSibling" />
    <TextView
        android:id="@+id/text_view_dateTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text_view_name"
        android:text="MM/DD/YYYY"/>

</RelativeLayout>

</androidx.cardview.widget.CardView>

MainActivity.java

package com.twocrows.foretoldapp;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.twocrows.foretoldapp.adapter.ChartAdapter;
import com.twocrows.foretoldapp.entity.Chart;
import com.twocrows.foretoldapp.viewmodel.ChartViewModel;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ChartViewModel chartViewModel;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setHasFixedSize(true);

        final ChartAdapter adapter = new ChartAdapter();
        recyclerView.setAdapter(adapter);

        chartViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(ChartViewModel.class);
        chartViewModel.getAllCharts().observe(this, new Observer<List<Chart>>() {
            @Override
            public void onChanged(List<Chart> charts) {
                adapter.setCharts(charts);
            }
        });
    }
}

问题是,每当我尝试运行这个应用程序时,它都会显示一个旧版本的主活动xml文件,我甚至不再在xml中包含这些组件,所以我不知道它们是从哪里来的。

我尝试过的事#

  • 使缓存失效/重新启动
  • 清洁构建
  • 编辑配置,取消选中“跳过安装,如果apk尚未更改”

到目前为止还没有任何效果。任何帮助都将不胜感激。谢谢!

0x6upsns

0x6upsns1#

应用程序显示旧版本的activity_main. xml(即使文件中不再包含这些组件)的问题可能是由于单个Activity具有两个不同的布局资源文件。您可以检查布局资源目录,查看是否具有两个不同版本的主Activity布局文件,例如“main.xml”和“main.xml(v21)",这可能导致混淆。You can see the reason for having multiple files in this answer.
在这种情况下,解决方案是确保编辑正确的布局文件。如果编辑了XML文件,但模拟器运行的是v21文件,则可以复制代码并将其粘贴到其他文件中。
如果您已对正确的文件进行了更改,但在模拟器中仍看到旧版本,则可以尝试清理并重新生成项目,甚至可以从模拟器中删除应用并重新安装。
如果您仍然遇到此问题,您可能还需要检查AndroidManifest.xml文件,以确保主Activity使用了正确的布局文件。此文件位于项目的“app”目录中。

相关问题