首页 > 解决方案 > 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,我真的需要你的帮助。

编辑这现在是我更新的代码我有不同的类

  1. Nameeingabespieler2(我希望选择微调器类型并将其转移到 Trinkspiel2spieler.java 的类)
  2. Trinkspiel2spieler(这是 Value 应该去的类,并为 Nameeingabespieler2 中选择的每个玩家设置可绘制对象)
  3. DinoWahl(用于微调器)
  4. 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),如果你愿意,玩家可以在你之后选择

标签: androidandroid-studiospinnerandroid-spinnerdrawable

解决方案


在您的“starteaktivity”方法中,您已经有了答案,您只需要将所选值通过额外的传递给意图。

编辑:为了更准确

嗨@MarcStumpp

我已经尝试过了,但该值不会转到 startactivity。如果我在 Spinner 函数中将它设置为字符串值,它将无法识别。你知道我该如何解决这个问题吗?

我认为您的代码在这种情况下并不完整。

  1. 首先,您应该将微调器声明为 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;
    ...
  1. 然后在您的“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);
        }
  1. 检索“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";
}

因此,像这样,您可以在您的活动中使用相同的额外密钥并降低拼写错误的风险。


推荐阅读