Java 在listview中使用textview搜索工具栏
因此,我尝试使用seekbar在listview的自定义适配器中获取进度值。代码上的一切都很好,但是当我尝试启动它时,程序会自动关闭并转到上一个活动。有人知道我的代码有什么问题吗 我正在使用SharedReferences用于将来应用程序中的其他活动,这就是我使用它的原因 这里是自定义适配器代码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
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;
}