OnClick方法不会启动新活动

时间:2019-10-13 21:49:53

标签: android android-activity onclick onclicklistener

此代码未调用下一个活动。我不明白为什么,但是此onClick方法无法启动下一个活动,尽管其他活动中的相同代码也可以。测试了调用其他活动,甚至没有效果。该按钮已创建,但是当我点击它时,什么也没发生。

编辑:人们,当我们对代码提出疑问时,我们想知道什么是错误的,为什么是错误的,如何修复以及为什么和这种修复有效。我们想同时理解问题和解决方案,并且仅丢下一个示例代码就不能对某些人有所帮助。我感谢大家花时间在我的问题上,并帮助我解决了这个问题,但是当您回答某人的问题时,请记住这句话。

package com.example.conjuradortormenta;


import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class ListadePersonagens extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listade_personagens);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        // Using shared preferences, we get information about the characters
        SharedPreferences informacoesdepersonagem = getSharedPreferences("com.example.conjuradortormenta_informaçoes_de_personagem", MODE_PRIVATE);
        int num = informacoesdepersonagem.getInt("numero_de_personagens", 0);
        String nome, resumo;

        Button botao[]= new Button[num+1];

        if(num!=0)
        {
            for(int i=1; i<=num; i++)// cria os botões de cada personagem
            {
                nome = informaçõesdepersonagem.getString("nome_personagem"+(i+1), "Nenhum");
                resumo = informaçõesdepersonagem.getString("raça_personagem"+(i+1), "Nenhum")+ " " + informaçõesdepersonagem.getString("classe_personagem"+(i+1), "Nenhum") + " " + Integer.toString(informaçõesdepersonagem.getInt("nivel_personagem"+(i+1), 0));

                botao[i]=new Button(this);
                botao[i].setText(nome+" "+resumo);
                botao[i].setId(i);

                botao[i].setOnClickListener(this);
                layout.addView(botao[i]);
            }
        }

        botao[0]=new Button(this);
        botao[0].setText("Criar Novo");
        botao[0].setId(1);

        botao[0].setOnClickListener(this);

        layout.addView(botao[0]);
    }


    @Override
    public void onClick(View view)
    {
        Intent nova = new Intent (this, CriadordePersonagem.class);
        startActivity(nova);
    }



}

5 个答案:

答案 0 :(得分:2)

您似乎在height中添加了一堆按钮,但实际上并没有在视图层次结构中添加LinearLayout。您可以尝试致电layout然后单击按钮吗?

答案 1 :(得分:1)

我认为您可以使用以下示例:-



     public class MainActivity extends AppCompatActivity implements View.OnClickListener {
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);

            Button button = findViewById(R.id.button);
            button.setOnClickListener(this);
         }
        @Override
         public void onClick(View v) {
             switch (v.getId())
             {
                 case R.id.button:
                    startActivity(new Intent(this, Doctor.class));
                    break;
             }
         }
     }

答案 2 :(得分:0)

查看XML layout很有用,但是我的第一个猜测是您没有在任何地方添加布局。

您的layout似乎是R.layout.activity_listade_personagens,因此,如果要对其进行编辑,应该获取它而不是创建一个新的对象:

setContentView(R.layout.activity_listade_personagens);

LinearLayout layout = findViewById(R.layout.activity_listade_personagens);

layout.setOrientation(LinearLayout.VERTICAL);
// Rest of your code

答案 3 :(得分:0)

onClick 方法中,您没有获得单击哪个视图的ID。因此,Android无法知道 onClick 的视图。您应该这样做:

@Override
public void onClick(View view){
    switch (view.getId()){
        case R.id.button:
            Intent nova = new Intent (this, CriadordePersonagem.class);
            startActivity(nova);
        break;
    }
}

答案 4 :(得分:0)

 button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(OneActivity.this, TwoActivity.class);
            startActivity(intent);

        }
    });