Java 在listview中使用textview搜索工具栏

Java 在listview中使用textview搜索工具栏,java,android,android-studio,sharedpreferences,custom-adapter,Java,Android,Android Studio,Sharedpreferences,Custom Adapter,因此,我尝试使用seekbar在listview的自定义适配器中获取进度值。代码上的一切都很好,但是当我尝试启动它时,程序会自动关闭并转到上一个活动。有人知道我的代码有什么问题吗 我正在使用SharedReferences用于将来应用程序中的其他活动,这就是我使用它的原因 这里是自定义适配器代码 public class PerrowAdapter extends ArrayAdapter<Perrow> { int textSize = 30; SharedPr

因此,我尝试使用seekbar在listview的自定义适配器中获取进度值。代码上的一切都很好,但是当我尝试启动它时,程序会自动关闭并转到上一个活动。有人知道我的代码有什么问题吗

我正在使用SharedReferences用于将来应用程序中的其他活动,这就是我使用它的原因

这里是自定义适配器代码

public class PerrowAdapter extends ArrayAdapter<Perrow> {

    int textSize = 30;

    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;


    private Context mContext;
    private int mResource;
    private ArrayList<Perrow> objects;

    public PerrowAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Perrow> objects) {
        super(context, resource, objects);
        this.mContext = context;
        this.mResource = resource;
        this.objects = objects;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        convertView = layoutInflater.inflate(mResource, parent, false);

        TextView tvArabic = convertView.findViewById(R.id.arabictext);
        TextView tvTransliteration = convertView.findViewById(R.id.transliteration);
        TextView tvTranslation = convertView.findViewById(R.id.translation);

        //seekbar

        int progress = sharedPreferences.getInt("progress", 0);
        
        SeekBar seekbar1 = convertView.findViewById(R.id.seekbar1);
        seekbar1.setProgress(progress);

        //settextsize
        tvArabic.setTextSize(textSize+seekbar1.getProgress()); // size 30sp

        Perrow perrow = objects.get(position);

        tvArabic.setText(perrow.getArabic());
        tvTransliteration.setText(perrow.getTransliteration());
        tvTranslation.setText(perrow.getTranslation());

        //seekbar

        seekbar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            int progressNew = 0;

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                textSize = textSize + (progress - progressNew);
                progressNew = progress;
                tvArabic.setTextSize(textSize);
                editor.putInt("progress", progress);
                editor.apply();
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        return convertView;
    }
}

下面是java的活动

public class fontsize extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{


    //SharedPreferences

    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;


    ListView listView;


    //variablesmenudrawer

    DrawerLayout drawerLayout;
    NavigationView navigationView;
    Toolbar toolbar;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fontsize);

        //sharedpreferences

        sharedPreferences = getSharedPreferences("fontsize", MODE_PRIVATE);
        editor = sharedPreferences.edit();


        //seekbar

        String[] arabic = getResources().getStringArray(R.array.fontsize);
        String[] transliteration = getResources().getStringArray(R.array.transliteration);
        String[] translation = getResources().getStringArray(R.array.translation);


        listView = findViewById(R.id.listView);

        //Create Data

        ArrayList<Perrow> list = new ArrayList<>();
        for(int i = 0; i < arabic.length; i++){
            list.add(new Perrow(arabic[i], transliteration[i], translation[i]));
        }



        ///customadapter

        PerrowAdapter perrowAdapter = new PerrowAdapter(this, R.layout.list_row, list);
        listView.setAdapter(perrowAdapter);


        //definingmenudrawer

        drawerLayout = findViewById(R.id.drawer_layout4);
        navigationView = findViewById(R.id.nav_view4);
        toolbar = findViewById(R.id.toolbar4);


        //toolbar

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

        //toolbar.setNavigationIcon(R.drawable.ic_toolbar);

        toolbar.setTitle("");
        toolbar.setSubtitle("");
        //toolbar.setLogo(R.drawable.ic_toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_baseline_dehaze_24);

        //navdrawermenu

        navigationView.bringToFront();
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        navigationView.setNavigationItemSelectedListener(this);
        navigationView.setCheckedItem(R.id.nav_home);

    }

    @Override
    public void onBackPressed() {

        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        }
        else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

        switch (menuItem.getItemId()) {


            case R.id.nav_home:
                Intent intent = new Intent(fontsize.this, home.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                finish();
            case R.id.nav_fontsize:
        }

        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }

}

以及我用来启动字体大小活动的主要活动

public class maintext extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{

    int textSize = 30;

    TextView textView;

    //sharedpreferencesvariables

    SharedPreferences prefs;
    SharedPreferences.Editor editor;

    //variablesmenudrawer

    DrawerLayout drawerLayout;
    NavigationView navigationView;
    Toolbar toolbar;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maintext);

        // definingtextview

        textView = findViewById(R.id.maintext);

        //sharedpreferencescall

        prefs = getSharedPreferences("fontsize", MODE_PRIVATE);

        int progress = prefs.getInt("progress",0);

        //settextsizeaccordingseekbar

        textView.setTextSize(textSize+progress);


        //definingmenudrawer

        drawerLayout = findViewById(R.id.drawer_layout1);
        navigationView = findViewById(R.id.nav_view1);
        toolbar = findViewById(R.id.toolbar1);


        //toolbar

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        //toolbar.setNavigationIcon(R.drawable.ic_toolbar);
        toolbar.setTitle("");
        toolbar.setSubtitle("");
        //toolbar.setLogo(R.drawable.ic_toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_baseline_dehaze_24);

        //navdrawermenu

        navigationView.bringToFront();
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        navigationView.setNavigationItemSelectedListener(this);
        navigationView.setCheckedItem(R.id.nav_home);

    }


    @Override
    public void onBackPressed() {

        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        }
        else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

        switch (menuItem.getItemId()) {


            case R.id.nav_home:
                Intent intent = new Intent(maintext.this, home.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                finish();
            case R.id.nav_fontsize:
                Intent intent1 = new Intent(maintext.this, fontsize.class);
                startActivity(intent1);
                finish();

        }

        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }

我认为在构造函数中,应该添加以下几行:

this.sharedPreferences = this.mContext.getSharedPreferences("SHARED_PREFERENCES_NAME", MODE_PRIVATE);
this.editor = this.sharedPreferences.edit();
如果您还没有这样做&您还没有创建一个名为“SharedReferences”的SharedReferences文件,该文件将替换“SHARED\u PREFERENCES\u name”,您的应用程序将再次崩溃,因为它将是此的空对象引用。在获取空值编辑器时,共享首选项将为空值。

尝试以下操作:

       PerrowAdapter perrowAdapter = new PerrowAdapter(getApplicationContext(), R.layout.list_row, list);
    listView.setAdapter(perrowAdapter);
添加中断关键字:

    case R.id.nav_home:
            Intent intent = new Intent(fontsize.this, home.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            finish();
            break;
        case R.id.nav_fontsize:
           break;
    }
安拉这样做会起作用:

    SeekBar seekbar1 = (SeekBar)convertView.findViewById(R.id.seekbar1);//typecast the seekbar
首先,在您的onprogresschanged上尝试以下方法:

        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if(progress!=null){
            textSize = textSize + (progress - progressNew);
            progressNew = progress;
            tvArabic.setTextSize(textSize);
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        editor.putInt("progress", progress);
            editor.apply();

        }
    });
   
代码的问题是您在fontsize活动中添加了NavigationItemselected,而不是在mainActivity中添加它。执行此操作后,您需要向fontsize活动和NavigationItemselected中的home活动发送意向。 真主保佑,这会奏效的

编辑:



你能分享一下坠机报告吗?它突然关上了。。但在这里的错误日志,我把它放在编辑的帖子上,你的应用程序在更改seekbar值时崩溃,或者它甚至没有打开。整个活动甚至没有打开,它突然停止并返回到prev activity我更新了问题,因为它只是自动关闭我很抱歉,但你能解释更多细节吗?我包括活动java请看一看是的,我的意思是,代码崩溃,因为你没有将任何值赋给SP属性和Editor属性,你应该按照我上面提到的那样通过获取SP文件来分配你在应用程序中的SP文件。否则,每次运行代码时,代码都会再次崩溃。还有一件事,您应该在编辑int值之前启用对它的编辑,在onProgressChange函数中添加下一行:editor.edit;很抱歉,编辑器编辑不是要在textview上应用该值吗?是否应该将其放在其他需要该值的活动上?Mashaalah感谢兄弟的回答,但它不起作用。我已经在活动中设置了适配器是的,先生,但它仍然不起作用..不起作用,先生。。我试过你的解决方案,但我真的很感谢你的回答。我把它放在编辑屏幕上。对不起,先生,但是活动仍然突然停止并返回到上一个活动。你在导航中添加了break关键字吗,您应该在主活动导航中添加一个break关键字。我不知道,先生,您能截图显示在运行终端中的错误吗?
    SeekBar seekbar1 = (SeekBar)convertView.findViewById(R.id.seekbar1);//typecast the seekbar
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if(progress!=null){
            textSize = textSize + (progress - progressNew);
            progressNew = progress;
            tvArabic.setTextSize(textSize);
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        editor.putInt("progress", progress);
            editor.apply();

        }
    });
   
   private Context mContext;
private int mResource;
private ArrayList<Perrow> objects;
 TextView tvArabic;
    TextView tvTransliteration;
    TextView tvTranslation;
public PerrowAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Perrow> objects, TextView tvArabic,
    TextView tvTransliteration,
    TextView tvTranslation) {
    super(context, resource, objects);
    this.mContext = context;
    this.mResource = resource;
    this.objects = objects;
    this.tvArabic=tvArabic;
    this.tvTransliteration=tvTransliteration;
   this.tvTranslation=tvTranslation;
}
  

    
public PerrowAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Perrow> 
objects) {
    super(context, resource, objects);
    this.mContext = context;
    this.mResource = resource;
    this.objects = objects;
    this.sharedPreferences = this.mContext.getSharedPreferences("progress", 
    MODE_PRIVATE);
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup 
parent) {
    LayoutInflater layoutInflater = LayoutInflater.from(mContext);
    convertView = layoutInflater.inflate(mResource, parent, false);

    TextView tvArabic = convertView.findViewById(R.id.arabictext);
    TextView tvTransliteration = convertView.findViewById(R.id.transliteration);
    TextView tvTranslation = convertView.findViewById(R.id.translation);

    //seekbar

    int progress = sharedPreferences.getInt("progress", 0);
    
    SeekBar seekbar1 = convertView.findViewById(R.id.seekbar1);
    seekbar1.setProgress(progress);

    //settextsize
    tvArabic.setTextSize(textSize+seekbar1.getProgress()); // size 30sp

    Perrow perrow = objects.get(position);

    tvArabic.setText(perrow.getArabic());
    tvTransliteration.setText(perrow.getTransliteration());
    tvTranslation.setText(perrow.getTranslation());

    //seekbar

    seekbar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        int progressNew = 0;

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            textSize = textSize + (progress - progressNew);
            this.editor = this.sharedPreferences.edit();
            progressNew = progress;
            tvArabic.setTextSize(textSize);
            this.editor.putInt("progress", progress);
            this.editor.apply();
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

    return convertView;
}