Я пытаюсь добавить в свой небольшой проект собственный диалог со шкалой рейтинга и еще несколькими виджетами, но застрял на этой ошибке. вроде новичок, поэтому я буду рад, если вы сможете сделать это проще для меня, спасибо
Я попытался изменить класс на абстрактный класс Java.
package com.a.shon.scoutszone2;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;
public class ZoneActivity extends Activity implements View.OnClickListener {
Button btnPeula;
ImageView ivMap;
ImageView ivZone; //Will Change in the future
//ListView lstZone;
Zone current = new Zone();
private Drawable[] maps;
@Override
protected void onCreate(Bundle savedInstanceState) { //add a dialog/menu to logout and manager activities
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zone);
btnPeula = findViewById(R.id.btnPeula);
ivMap = findViewById(R.id.ivMap);
maps = new Drawable[4];
maps[0] = getResources().getDrawable(R.drawable.map, null);
ivMap.setImageDrawable(maps[0]);
ivZone=findViewById(R.id.ivZone);//Will Change in the future
maps[1] = getResources().getDrawable(R.drawable.tzone, null);//Will Change in the future
ivZone.setImageDrawable(maps[1]); //Will Change in the future
//lstZone = findViewById(R.id.lstZone);
//lstZone.setOnItemClickListener(this);
// lstZone.setAdapter( new ArrayAdapter<Zone>(this, android.R.layout))
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.the_menu,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(final MenuItem item)
{
super.onOptionsItemSelected(item);
switch (item.getItemId())
{
case R.id.itemManager:
Toast.makeText(this, "Manager...", Toast.LENGTH_SHORT).show();
Intent manager = new Intent(this, manager.class);
startActivity(manager);
break;
case R.id.itemLogout:
Toast.makeText(this, "Logging out...", Toast.LENGTH_SHORT).show();
finish();
break;
case R.id.itemRating: //make it a dialog not an activity!
Toast.makeText(this, "Start Rating!", Toast.LENGTH_SHORT).show();
showCustomDialog();
break;
}
return true;
}
public void onPeula(View v)
{
Intent peula = new Intent(this, PeulotActivity.class);
startActivity(peula);
}
private void showCustomDialog()
{
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.custom_dialog);
// set the custom dialog components - text, image and button
final RatingBar mRatingbar = (RatingBar) findViewById(R.id.mRatingbar);
final TextView tvRatingscale = (TextView) findViewById(R.id.tvRatingScale);
final EditText etFeedback = (EditText) findViewById(R.id.etFeedback);
Button btnSubmit = (Button) findViewById(R.id.btnSubmit);
mRatingbar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
tvRatingscale.setText(String.valueOf(v));
switch ((int) ratingBar.getRating()) {
case 1:
tvRatingscale.setText("Very bad");
break;
case 2:
tvRatingscale.setText("Need some improvement");
break;
case 3:
tvRatingscale.setText("Good");
break;
case 4:
tvRatingscale.setText("Great");
break;
case 5:
tvRatingscale.setText("Awesome. I love it");
break;
default:
tvRatingscale.setText("");
}
}
});
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// if (etFeedback.getText().toString().isEmpty()) {
// Toast.makeText(ZoneActivity.this, "Please fill in feedback text box", Toast.LENGTH_LONG).show();
// } else {
etFeedback.setText("");
mRatingbar.setRating(0);
//Toast.makeText(ZoneActivity.this, "Thank you for sharing your feedback", Toast.LENGTH_SHORT).show();
}
// }
});
dialog.show();
}
@Override
public void onClick(View v)
{
Toast.makeText(this, "Click", Toast.LENGTH_SHORT).show();
}
}
Я ожидаю, что при открытии диалога приложение не будет падать, но на самом деле каждый раз, когда нажимается кнопка открытия диалога, приложение падает
java.lang.InstantiationException: экземпляр java.lang.Class не может быть создан в java.lang.Class.newInstance (собственный метод)
1 ответ
Вам нужно использовать Builder для создания вашего диалога вместо его непосредственного создания.
Класс Dialog является базовым классом для диалогов, но вам следует избегать создания экземпляра Dialog напрямую. Вместо этого используйте один из следующих подклассов:
AlertDialog Диалоговое окно, которое может отображать заголовок, до трех кнопок, список доступных для выбора элементов или пользовательский макет.
Пример кода:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = requireActivity().getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.dialog_signin, null))
// Add action buttons
.setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// sign in the user ...
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
LoginDialogFragment.this.getDialog().cancel();
}
});
Кроме того, если вы хотите правильно обрабатывать события жизненного цикла, рассмотрите возможность использования DialogFragment
и создайте свой диалог в этом фрагменте.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.