当前位置: 首页 > 工具软件 > 记帐App > 使用案例 >

记录一下自己在写记账APP时遇到的问题(一)

长孙逸仙
2023-12-01

1.在为Button设置android:background="@drawable/main_recordbtn_bg"背景时不生效

解决方法:在res/values/themes.xml 文件中,
parent=“Theme.MaterialComponents.DayNight.DarkActionBar” 修改为
parent=“Theme.MaterialComponents.DayNight.NoActionBar.Bridge” 即可!!

2.使用TabLayout 滑动标签时未生效
先来看一下TabLayout标签的使用
首先需要添加Tablayout的依赖material
然后写页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".RecordActivity"
    android:orientation="vertical"
    android:background="@color/grey_f3f3f3">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <ImageView
            android:id="@+id/record_iv_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ih_error"
            android:paddingTop="15dp"
            android:onClick="onClick"
            android:layout_marginLeft="10dp"/>
        <com.google.android.material.tabs.TabLayout
            android:id="@+id/record_tabs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            app:tabGravity="center"
            app:tabMode="fixed"
            app:tabTextColor="@color/grey_7D7D7D"
            app:tabSelectedTextColor="@color/black"
            app:tabIndicatorColor="@color/black"/>
    </RelativeLayout>
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/record_vp"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"/>
</LinearLayout>

页面布局中使用到了TabLayout与ViewPager,我们要让ViewPager随着TabLayout联动

接着写相对应的Java文件

package com.example.bookkeeping;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;
import android.view.View;

import com.example.bookkeeping.adapter.RecordPageAdapter;
import com.example.bookkeeping.frag_record.IncomeFragment;
import com.example.bookkeeping.frag_record.OutcomeFragment;
import com.google.android.material.tabs.TabLayout;

import java.util.ArrayList;
import java.util.List;

public class RecordActivity extends AppCompatActivity {
    TabLayout tabLayout;
    ViewPager viewPager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_record);
        //查找控件
        tabLayout=findViewById(R.id.record_tabs);
        viewPager=findViewById(R.id.record_vp);
        //2设置ViewPager加载页面
        initPager();
    }

    private void initPager() {
        //  初始化ViewPager页面的集合
        List<Fragment> fragmentList=new ArrayList<>();
        //创建收入和支出页面,放在Fragment中
        OutcomeFragment outFrag=new OutcomeFragment();//支出
        IncomeFragment inFrag=new IncomeFragment();//收入
        fragmentList.add(outFrag);
        fragmentList.add(inFrag);

        //创建适配器
       RecordPageAdapter pageAdapter= new RecordPageAdapter(getSupportFragmentManager(),fragmentList);

        //设置适配器对象
        viewPager.setAdapter(pageAdapter);

        //将TabLayout和ViewPager进行关联
        tabLayout.setupWithViewPager(viewPager);
    }

    //点击事件
    public void onClick(View view) {
        switch(view.getId()){
            case R.id.record_iv_back:
            finish();
            break;
        }
    }
}

通过获取控件,初始化ViewPager页面集合,创建页面放入到Fragment中,使每次点击后都是不同的Fragment。里面有一个FragmentList,是通过Adapter添加进入的,具体代码如下:

package com.example.bookkeeping.adapter;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

import java.util.List;

public class RecordPageAdapter extends FragmentPagerAdapter {
    List<Fragment> fragmentList;
    String[]titles={"支出","收入"};
    public RecordPageAdapter(@NonNull FragmentManager fm, List<Fragment> fragmentList) {
        super(fm);
        this.fragmentList=fragmentList;
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }
}

RecordPageAdapter 继承自FragmentPagerAdapter ,里面需要实现三个方法,注意三个方法的返回值,一定要返回你所创建的FragmentList,同时也要记得重新写getPageTitle方法,返回你上面写的title,不然都是无法显示的

解决方法:我就是没有修改Adapter方法中的返回值导致使用滑动标签时为生效,显示都没显示

3. androidx.appcompat.widget.AppCompatTextView cannot be cast to android.widget.ImageView 报错

**解决:**提示你TextView 不能映射成ImageView,简单的说,就是你xml文件中定义的类型为TextView,在Java文件中进行获取时写成了ImageView类型,由于ID太多而写错的问题,还浪费了好长时间,改一下就行了。

 类似资料: