0

我对 onClickListener 方法有疑问。当它被称为应用程序崩溃时。我一直在寻找解决方案,但似乎我的代码包含了所有被告知的内容。

public class Sudoku extends Activity implements OnClickListener {

   @Override
   public void onCreate(Bundle savedInstanceState) 
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_sudoku);
      View continue_button = findViewById(R.id.continue_button);
      continue_button.setOnClickListener(this);
      View new_button = findViewById(R.id.new_button);
      new_button.setOnClickListener(this);
      View about_button = findViewById(R.id.about_button);
      about_button.setOnClickListener(this);
      View exit_button = findViewById(R.id.exit_button);
      exit_button.setOnClickListener(this);
   }

   // ...

   public void onClick(View v) 
   {
      switch (v.getId()) 
      {
      case R.id.about_button:
         Intent i = new Intent(this, About.class);
         startActivity(i);
         break;
      }
   }
}

--

public class About extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_about);
   }
}

主要活动:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/background"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="30dip"
    tools:context=".Sudoku" >
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center" >
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/main_tittle" 
            android:gravity="center"
            android:textColor="@color/main_tittle"
            android:textSize="25sp"
            android:layout_marginBottom="25dip"/>
        <Button 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/continue_label" />
        <Button 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/new_game_label" />
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/about_label" />
        <Button 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/exit_label" />
    </LinearLayout>
</LinearLayout>

我是android / java编程的初学者,请原谅。

4

3 回答 3

1
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="25dip"
        android:gravity="center"
        android:id="@+id/main_tittle"
        android:textSize="25sp" />

    <Button
        android:id="@+id/continue_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/new_game_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/about_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/exit_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

 @Override
       public void onCreate(Bundle savedInstanceState) 
       {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_sudoku);
          View continue_button = findViewById(R.id.continue_button); /// findviewbyid not by text String resource
          continue_button.setOnClickListener(this);
          View new_button = findViewById(R.id.new_button);
          new_button.setOnClickListener(this);
          View about_button = findViewById(R.id.about_button);
          about_button.setOnClickListener(this);
          View exit_button = findViewById(R.id.exit_button);
          exit_button.setOnClickListener(this);
       }
于 2013-07-24T08:48:56.137 回答
0

如果您使用的是 Button,那么您也使用的是 View

你正在使用这个

View continue_button = findViewById(R.id.continue_button);
      continue_button.setOnClickListener(this);
      View new_button = findViewById(R.id.new_button);
      new_button.setOnClickListener(this);
      View about_button = findViewById(R.id.about_button);
      about_button.setOnClickListener(this);
      View exit_button = findViewById(R.id.exit_button);
      exit_button.setOnClickListener(this);

应该是这样的

Button continue_button = (Button)findViewById(R.id.continue_button);
      continue_button.setOnClickListener(this);
      Button new_button = (Button)findViewById(R.id.new_button);
      new_button.setOnClickListener(this);
      Button about_button =(Button) findViewById(R.id.about_button);
      about_button.setOnClickListener(this);
      Button exit_button =(Button) findViewById(R.id.exit_button);
      exit_button.setOnClickListener(this);

您在每个按钮中都有 post xml 文件,添加这样的 id 属性(在每个按钮标签中)

          <Button 
            android:id="@+id/continue_button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/continue_label" />


        <Button 
        android:id="@+id/new_button"
        android:id="@+id/new_game_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/about_button"
        android:id="@+id/about_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/exit_button"
        android:id="@+id/exit_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
于 2013-07-24T08:49:45.020 回答
0

我没有看到在 xml 中为您的 Buttons 声明任何 id。

        <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/about_button"
        android:text="@string/about_label" />
于 2013-07-24T08:51:34.907 回答