android - Android Studio:设置并将选择的微调器值传输到下一个活动
问题描述
我正在编写一个小型游戏应用程序,每个玩家都可以选择一个可绘制对象,然后将其设置为以下活动,即小型游戏。
到目前为止,这是我的代码:
public class Nameeingabespieler2 extends AppCompatActivity {
public static final String EXTRA_NAME1 = "com.example.die_trinkspielapp.EXTRA_NAME1";
public static final String EXTRA_NAME2 = "com.example.die_trinkspielapp.EXTRA_NAME2";
public static final String Dinonametest1 = "com.example.die_trinkspielapp.DinoSpieler1";
private TextInputLayout namespieler1;
private TextInputLayout namespieler2;
private ArrayList<DinoWahl> mDinoWahl;
private DinoAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nameeingabespieler2);
namespieler1 = findViewById(R.id.Spieler_1_input);
namespieler2 = findViewById(R.id.Spieler_2_input);
final TextView testtest = (TextView) findViewById(R.id.textView3);
initList();
final Spinner dinospinner = findViewById(R.id.spinner);
Spinner dinospinner2 = findViewById(R.id.spinner2);
mAdapter = new DinoAdapter(this, mDinoWahl);
dinospinner.setAdapter(mAdapter);
dinospinner2.setAdapter(mAdapter);
dinospinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
DinoWahl clickedItem = (DinoWahl) adapterView.getItemAtPosition(i);
String DinoName = clickedItem.getmDinoName();
Toast.makeText(Nameeingabespieler2.this,DinoName + " ausgewählt", Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
dinospinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
DinoWahl clickedItem = (DinoWahl) adapterView.getItemAtPosition(i);
String DinoName2 = clickedItem.getmDinoName();
Toast.makeText(Nameeingabespieler2.this,DinoName2 + " ausgewählt", Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
private void initList(){
mDinoWahl = new ArrayList<>();
mDinoWahl.add(new DinoWahl("Brutus",R.drawable.alkdino));
mDinoWahl.add(new DinoWahl("Skitty",R.drawable.coolerdino));
mDinoWahl.add(new DinoWahl("Pharmi",R.drawable.drogendino));
mDinoWahl.add(new DinoWahl("Luise",R.drawable.frauendino));
mDinoWahl.add(new DinoWahl("Rex",R.drawable.koenigsdino));
mDinoWahl.add(new DinoWahl("Cookie",R.drawable.kochdino));
mDinoWahl.add(new DinoWahl("Divi",R.drawable.magierdino));
mDinoWahl.add(new DinoWahl("Fumu",R.drawable.shishadino));
mDinoWahl.add(new DinoWahl("Dr. Saurum",R.drawable.streberdino));
}
private boolean wertspieler1() {
String usernameInput = namespieler1.getEditText().getText().toString().trim();
if (usernameInput.isEmpty()) {
namespieler1.setError("Spieler bitte eintragen");
return false;
} else if (usernameInput.length() > 15) {
namespieler1.setError("Name zu lang");
return false;
} else {
namespieler1.setError(null);
return true;
}
}
private boolean wertspieler2() {
String usernameInput = namespieler2.getEditText().getText().toString().trim();
if (usernameInput.isEmpty()) {
namespieler2.setError("Spieler bitte eintragen");
return false;
} else if (usernameInput.length() > 15) {
namespieler2.setError("Name zu lang");
return false;
} else {
namespieler2.setError(null);
return true;
}
}
public void starteaktivity(View view) {
if (!wertspieler1() | !wertspieler2()) {
return;
}
EditText editText1 = (EditText) findViewById(R.id.spieler1id);
String name1 = editText1.getText().toString();
EditText editText2 = (EditText) findViewById(R.id.Spieler2id);
String name2 = editText2.getText().toString();
if(name1.equals(name2)) {
Toast.makeText(Nameeingabespieler2.this, "bitte unterschiedliche Namen eingeben",Toast.LENGTH_LONG).show();
} else {
Intent intent = new Intent(this, Trinkspiel2spieler.class);
intent.putExtra(EXTRA_NAME1, name1);
intent.putExtra(EXTRA_NAME2, name2);
startActivity(intent);
}
}
}
到目前为止,这是我的代码,最相关的部分是这个。
初始化列表();
final Spinner dinospinner = findViewById(R.id.spinner);
Spinner dinospinner2 = findViewById(R.id.spinner2);
mAdapter = new DinoAdapter(this, mDinoWahl);
dinospinner.setAdapter(mAdapter);
dinospinner2.setAdapter(mAdapter);
dinospinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
DinoWahl clickedItem = (DinoWahl) adapterView.getItemAtPosition(i);
String DinoName = clickedItem.getmDinoName();
Toast.makeText(Nameeingabespieler2.this,DinoName + " ausgewählt", Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
dinospinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
DinoWahl clickedItem = (DinoWahl) adapterView.getItemAtPosition(i);
String DinoName2 = clickedItem.getmDinoName();
Toast.makeText(Nameeingabespieler2.this,DinoName2 + " ausgewählt", Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
我没有选择要转移的drawable,我真的需要你的帮助。
编辑这现在是我更新的代码我有不同的类
- Nameeingabespieler2(我希望选择微调器类型并将其转移到 Trinkspiel2spieler.java 的类)
- Trinkspiel2spieler(这是 Value 应该去的类,并为 Nameeingabespieler2 中选择的每个玩家设置可绘制对象)
- DinoWahl(用于微调器)
- DinoAdapter(微调器的适配器)
我现在的问题是,即使我按您所说的键入(行:162)所有内容,我也不会转移价值。如果我添加(第 26 和 27 行)这些 Spinner 声明,它们将不会被使用,如果我删除(第 41 和 42 行),则应用程序崩溃。但是即使现在有了这个版本,下一个 Activity (Trinkspiel2spieler) 也不会打开。我真的不知道现在该怎么办。非常抱歉打扰您,但如果您能帮助我,我将非常感激。
public class Nameeingabespieler2 extends AppCompatActivity {
public static final String EXTRA_NAME1 = "com.example.die_trinkspielapp.EXTRA_NAME1";
public static final String EXTRA_NAME2 = "com.example.die_trinkspielapp.EXTRA_NAME2";
public static final String EXTRA_DINO1 = "com.example.die_trinkspielapp.DinoSpieler1";
public static final String Dinonametest2 = "com.example.die_trinkspielapp.DinoSpieler2";
private TextInputLayout namespieler1;
private TextInputLayout namespieler2;
private Spinner dinospinner;
private Spinner dinospinner2;
private ArrayList<DinoWahl> mDinoWahl;
private DinoAdapter mAdapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nameeingabespieler2);
namespieler1 = findViewById(R.id.Spieler_1_input);
namespieler2 = findViewById(R.id.Spieler_2_input);
Spinner dinospinner = findViewById(R.id.spinner);
Spinner dinospinner2 = findViewById(R.id.spinner2);
initList();
mAdapter = new DinoAdapter(this, mDinoWahl);
dinospinner.setAdapter(mAdapter);
dinospinner2.setAdapter(mAdapter);
dinospinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
DinoWahl clickedItem = (DinoWahl) adapterView.getItemAtPosition(i);
String DinoName = clickedItem.getmDinoName();
Toast.makeText(Nameeingabespieler2.this,DinoName + " ausgewählt", Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
dinospinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Context ctx = view.getContext();
DinoWahl clickedItem = (DinoWahl) adapterView.getItemAtPosition(i);
String DinoName2 = clickedItem.getmDinoName();
Toast.makeText(Nameeingabespieler2.this,DinoName2 + " ausgewählt", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClass(ctx, Constants.class);
intent.putExtra(Dinonametest2, DinoName2);
}
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
private void initList(){
mDinoWahl = new ArrayList<>();
mDinoWahl.add(new DinoWahl("Brutus",R.drawable.alkdino));
mDinoWahl.add(new DinoWahl("Skitty",R.drawable.coolerdino));
mDinoWahl.add(new DinoWahl("Pharmi",R.drawable.drogendino));
mDinoWahl.add(new DinoWahl("Luise",R.drawable.frauendino));
mDinoWahl.add(new DinoWahl("Rex",R.drawable.koenigsdino));
mDinoWahl.add(new DinoWahl("Cookie",R.drawable.kochdino));
mDinoWahl.add(new DinoWahl("Divi",R.drawable.magierdino));
mDinoWahl.add(new DinoWahl("Fumu",R.drawable.shishadino));
mDinoWahl.add(new DinoWahl("Dr. Saurum",R.drawable.streberdino));
}
private boolean wertspieler1() {
String usernameInput = namespieler1.getEditText().getText().toString().trim();
if (usernameInput.isEmpty()) {
namespieler1.setError("Spieler bitte eintragen");
return false;
} else if (usernameInput.length() > 15) {
namespieler1.setError("Name zu lang");
return false;
} else {
namespieler1.setError(null);
return true;
}
}
private boolean wertspieler2() {
String usernameInput = namespieler2.getEditText().getText().toString().trim();
if (usernameInput.isEmpty()) {
namespieler2.setError("Spieler bitte eintragen");
return false;
} else if (usernameInput.length() > 15) {
namespieler2.setError("Name zu lang");
return false;
} else {
namespieler2.setError(null);
return true;
}
}
public void starteaktivity(View view) {
if (!wertspieler1() | !wertspieler2()) {
return;
}
EditText editText1 = (EditText) findViewById(R.id.spieler1id);
String name1 = editText1.getText().toString();
EditText editText2 = (EditText) findViewById(R.id.Spieler2id);
String name2 = editText2.getText().toString();
if(name1.equals(name2)) {
Toast.makeText(Nameeingabespieler2.this, "bitte unterschiedliche Namen eingeben",Toast.LENGTH_LONG).show();
}
else{
Intent intent = new Intent(this, Trinkspiel2spieler.class);
intent.putExtra(EXTRA_NAME1, name1);
intent.putExtra(EXTRA_NAME2, name2);
intent.putExtra(EXTRA_DINO1, ((DinoWahl) dinospinner.getSelectedItem()).getmDinoName());
startActivity(intent);
}
}
}
Trinkspiel2spieler(尚未完成)
public class Trinkspiel2spieler extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_trinkspiel2spieler);
Button testnamentest = (Button) findViewById(R.id.namenbuttonid);
testnamentest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startetest();
}
});
}
public void startetest() {
//namen einlesen
Intent intent = getIntent();
String nametextstring1 = intent.getStringExtra(Constants.EXTRA_NAME1);
String nametextstring2 = intent.getStringExtra(Constants.EXTRA_NAME2);
String Dino_uerbertragung1 = intent.getStringExtra(Constants.Dinonametest1);
String Dino_uerbertragung2 = intent.getStringExtra(Constants.Dinonametest2);
String Namen[] = {nametextstring1,nametextstring2};
//TextViews deklarieren
TextView Textview1 = (TextView) findViewById(R.id.nameanzeige1);
TextView Textview2 = (TextView) findViewById(R.id.nameanzeige2);
ImageView Dinoimage = (ImageView) findViewById(R.id.imageView2);
//TextView Textview3 = (TextView) findViewById(R.id.nameanzeige3);
Random random = new Random();
int num = random.nextInt(Namen.length);
Textview1.setText(Namen[num]);
if (Namen[num] == nametextstring1){
if (Dino_uerbertragung1 == "Cookie")
Dinoimage.setImageResource(R.drawable.kochdino);
}
else {
Dinoimage.setImageResource(R.drawable.coolerdinomrk2klein);
}
Resources resources = getResources();
String[] Trinkspielfragen = resources.getStringArray(R.array.Trinkspiel);
Random random1 = new Random();
int num2 = random1.nextInt(Trinkspielfragen.length);
Textview2.setText(Trinkspielfragen[num2]);
}
}
迪诺瓦尔
public class DinoWahl {
private String mDinoName;
private int mDinoWahl;
public DinoWahl(String Dinoname,int dinoBild) {
mDinoName = Dinoname;
mDinoWahl = dinoBild;
}
public String getmDinoName() {
return mDinoName;
}
public int getDinoWahl(){
return mDinoWahl;
}
}
恐龙适配器
public class DinoAdapter extends ArrayAdapter <DinoWahl>{
public DinoAdapter(Context context, ArrayList<DinoWahl> DinoListe) {
super(context, 0, DinoListe);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return initView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return initView(position, convertView, parent);
}
private View initView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.dino_spinner, parent, false
);
}
ImageView imageViewDino = convertView.findViewById(R.id.alkoholdino);
TextView textViewName = convertView.findViewById(R.id.Dinoname);
DinoWahl curentItem = getItem(position);
if (curentItem != null) {
imageViewDino.setImageResource(curentItem.getDinoWahl());
textViewName.setText(curentItem.getmDinoName());
}
return convertView;
}
}
常数
package com.example.die_trinkspielapp;
公共类常量 { 公共静态最终字符串 EXTRA_NAME1 = "com.example.die_trinkspielapp.EXTRA_NAME1"; 公共静态最终字符串EXTRA_NAME2 =“com.example.die_trinkspielapp.EXTRA_NAME2”;公共静态最终字符串EXTRA_NAME3 =“com.example.die_trinkspielapp.EXTRA_NAME3”;公共静态最终字符串EXTRA_NAME4 =“com.example.die_trinkspielapp.EXTRA_NAME4”;公共静态最终字符串EXTRA_NAME5 =“com.example.die_trinkspielapp.EXTRA_NAME5”;公共静态最终字符串EXTRA_NAME6 =“com.example.die_trinkspielapp.EXTRA_NAME6”;公共静态最终字符串EXTRA_NAME7 =“com.example.die_trinkspielapp.EXTRA_NAME7”;公共静态最终字符串EXTRA_NAME8 =“com.example.die_trinkspielapp.EXTRA_NAME8”;公共静态最终字符串EXTRA_NAME9 =“com.example。
public static final String Dinonametest1 = "com.example.die_trinkspielapp.DinoSpieler1";
public static final String Dinonametest2 = "com.example.die_trinkspielapp.DinoSpieler2";
public static final String Dinonametest3 = "com.example.die_trinkspielapp.DinoSpieler3";
public static final String Dinonametest4 = "com.example.die_trinkspielapp.DinoSpieler4";
public static final String Dinonametest5 = "com.example.die_trinkspielapp.DinoSpieler5";
public static final String Dinonametest6 = "com.example.die_trinkspielapp.DinoSpieler6";
public static final String Dinonametest7 = "com.example.die_trinkspielapp.DinoSpieler7";
public static final String Dinonametest8 = "com.example.die_trinkspielapp.DinoSpieler8";
public static final String Dinonametest9 = "com.example.die_trinkspielapp.DinoSpieler9";
}
如果你能在这里帮助我,我会命名一个 Drawables(Dinos),如果你愿意,玩家可以在你之后选择
解决方案
在您的“starteaktivity”方法中,您已经有了答案,您只需要将所选值通过额外的传递给意图。
编辑:为了更准确
嗨@MarcStumpp
我已经尝试过了,但该值不会转到 startactivity。如果我在 Spinner 函数中将它设置为字符串值,它将无法识别。你知道我该如何解决这个问题吗?
我认为您的代码在这种情况下并不完整。
- 首先,您应该将微调器声明为 Activity 的属性变量
public class Nameeingabespieler2 extends AppCompatActivity {
private TextInputLayout namespieler1;
private TextInputLayout namespieler2;
private Spinner dinospinner;
private Spinner dinospinner2;
private ArrayList<DinoWahl> mDinoWahl;
private DinoAdapter mAdapter;
...
- 然后在您的“starteaktivity”方法中,您可以获得微调器的值以将其作为额外的意图传递:
if(name1.equals(name2)) {
Toast.makeText(Nameeingabespieler2.this, "bitte unterschiedliche Namen eingeben",Toast.LENGTH_LONG).show();
} else {
Intent intent = new Intent(this, Trinkspiel2spieler.class);
intent.putExtra(EXTRA_NAME1, name1);
intent.putExtra(EXTRA_NAME2, name2);
intent.putExtra(EXTRA_NAME3, ((DinoWahl) dinospinner.getSelectedItem()).getmDinoName());
...
startActivity(intent);
}
- 检索“Trinkspiel2spieler”活动中的值:
public class Trinkspiel2spieler extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_trinkspiel2spieler);
String firstSpinnerVal = getIntent().getStringExtra(Constants.EXTRA_NAME3);
...
}
}
建议
我建议你为你的额外创建一个常量类,例如:
public class Constants {
public static final String EXTRA_NAME1 = "com.example.die_trinkspielapp.EXTRA_NAME1";
public static final String EXTRA_NAME2 = "com.example.die_trinkspielapp.EXTRA_NAME2";
public static final String EXTRA_NAME3 = "com.example.die_trinkspielapp.EXTRA_NAME3";
...
public static final String Dinonametest1 = "com.example.die_trinkspielapp.DinoSpieler1";
}
因此,像这样,您可以在您的活动中使用相同的额外密钥并降低拼写错误的风险。
推荐阅读
- javascript - 如何使用 Input + Button + JS 脚本和 Mailchimp 发送电子邮件
- javascript - 将 dataTable 输入字段宽度设置为自动
- android - 使用函数引用来注册和注销监听器是否安全?
- reactjs - 样式化组件 - 具有嵌套类的 css 变量
- debian - 如何在 Debian 软件包控制文件“Depends:”“Pre-Depends”子句中指定次要版本的范围
- go - 如何将字符串转换为复数?
- python - 我如何根据 12 个数组(12 个月)制作颜色图?
- github - 如何从 github API 获取网站链接?
- python - 如何确定使用 lmfit 进行曲线拟合的初始参数值
- mesibo - 在mesibo群聊中,我无法创建群,有人知道如何创建吗?