代码之家  ›  专栏  ›  技术社区  ›  Milan Maxa Maksimović

根据填写的文本数打开另一个活动

  •  0
  • Milan Maxa Maksimović  · 技术社区  · 6 年前

    app 有一个 MainActivity 带6个 editText button . 还有5个活动,名为 Activity2 , Activity3 现在,当用户在 编辑文本 字段,然后按a ,的 应用程序 字段将被填充,并以活动名称中相应的数字打开活动。

    例子:

    • 如果只填充了一个字段,则 toast 应该出现,说 .
    • 如果填写了两个字段, 应用程序 活动2
    • 如果填了三个字段, 打开 等等。

    public class MainActivity extends AppCompatActivity {
    
    private EditText editText1,editText2,editText3,editText4,editText5,editText6;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        Button btn = findViewById(R.id.btn);
        editText1 = findViewById(R.id.editText1);
        editText2 = findViewById(R.id.editText2);
        editText3 = findViewById(R.id.editText3);
        editText4 = findViewById(R.id.editText4);
        editText5 = findViewById(R.id.editText5);
        editText6 = findViewById(R.id.editText6);
    
    
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                int filledFileds = countFilledFields();
                Log.d("filled", String.valueOf(filledFileds));
                Class newClass = MainActivity.class;
    
                switch (filledFileds){
    
                    case 1:
    
                        Context context = getApplicationContext();
                        CharSequence text = "You need more players!";
                        int duration = Toast.LENGTH_SHORT;
    
                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();
    
                        break;
    
                    case 2:
    
                        newClass = Activity2.class;
                        System.out.println("Activity2");
    
                        break;
    
                    case 3:
    
                        newClass = Activity3.class;
                        System.out.println("Activity3");
    
                        break;
    
                    case 4:
    
                        newClass = Activity4.class;
                        System.out.println("Activity4");
    
                        break;
    
                    case 5:
    
                        newClass = Activity5.class;
                        System.out.println("Activity5");
    
                        break;
    
                    case 6:
    
                        newClass = Activity6.class;
                        System.out.println("Activity6");
    
                        break;
    
                    default:
    
    
                }
    
                Intent intent = new Intent(MainActivity.this, newClass);
            }
        });
    }
    
    private int countFilledFields() {
    
        ArrayList<EditText> editTexts = new ArrayList<>();
        editTexts.add(editText1);
        editTexts.add(editText2);
        editTexts.add(editText3);
        editTexts.add(editText4);
        editTexts.add(editText5);
        editTexts.add(editText6);
    
        int filledNumber = 0;
    
        for(int i = 0;i < editTexts.size() ;i++){
    
            if(editTexts.get(i).getText()!=null && !editTexts.get(i).getText().toString().matches("")){
                filledNumber += 1;
            }
    
        }
        return filledNumber;
    }
    

    日志显示了确切的数字,有些东西不起作用。。。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Ben P.    6 年前

    这是您的click侦听器,带有 switch 为简洁起见,省略:

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
            int filledFileds = countFilledFields();
            Log.d("filled", String.valueOf(filledFileds));
            Class newClass = MainActivity.class;
    
            switch (filledFileds){
                ...
            }
    
            Intent intent = new Intent(MainActivity.this, newClass);
        }
    

    Intent 对象。。。但你什么都没做。可能你刚刚忘了一件事 startActivity()

    Intent intent = new Intent(MainActivity.this, newClass);
    startActivity(intent);
    

    另外,仔细看,用户只输入一个EditText的情况也有问题。如前所述,您仍将尝试启动一个新活动(您只需启动同一MainActivity的新副本,这可能是个坏主意)。更好的办法是只有在用户填写了足够的编辑文本后才开始新的活动:

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
            int filledFileds = countFilledFields();
            Log.d("filled", String.valueOf(filledFileds));
            Class newClass = null;
    
            switch (filledFileds){
                ...
            }
    
            if (newClass != null) {
                Intent intent = new Intent(MainActivity.this, newClass);
                startActivity(intent);
            }
        }
    
        2
  •  1
  •   Petro    6 年前

    你错过了一件事:

     startActivity(intent);