2015-03-01 3 views
0

У меня есть код, который работает только в MainActivity, и я не знаю, как заставить его работать во втором действии.Работает только в Основной деятельности?

import android.app.Activity; 
import android.content.res.Resources; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import java.util.Random; 


public class MainActivity extends Activity { 

    private String[] myString; 
    private static final Random rgenerator = new Random(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     Resources res = getResources(); 

     myString = res.getStringArray(R.array.myArray); 

     String q = myString[rgenerator.nextInt(myString.length)]; 

     TextView tv = (TextView) findViewById(R.id.textView); 
     tv.setText(q); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    public void ButtonOnClick (View v) { 
     Button button = (Button) v; 
     setContentView(R.layout.activity_szabaly); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Когда я начинаю мое приложение, в первой активности текст меняется (потому что это случайный текст изменения кода), но при нажатии на кнопку, которая заставляет меня идти на второй активности, ничего не происходит, никаких действий во втором действии.

Что я делаю неправильно?

Мой файл манифеста

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.example" > 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".Szabaly" 
      android:label="@string/title_activity_szabaly" > 
     </activity> 
    </application> 

</manifest> 

ответ

1

вы добавляете атрибут android: onClick в макет? это плохая практика

лучше реализации View.OnClickListener

public class MainActivity extends Activity { 

private String[] myString; 
private static final Random rgenerator = new Random(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    Resources res = getResources(); 

    myString = res.getStringArray(R.array.myArray); 

    String q = myString[rgenerator.nextInt(myString.length)]; 

    TextView tv = (TextView) findViewById(R.id.textView); 
    tv.setText(q); 
    //finde button 
    Button button =(Button)findViewById(R.id.button); 
    //set OnClickListener 
    button.setOnClickListener(this); 
} 

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

Вы на самом деле не начать новую деятельность на вашей кнопки. Вместо этого вы просто меняете свое мнение. Это не будет причиной повторного вызова метода onCreate.

public void ButtonOnClick (View v) { 
    Button button = (Button) v; 
    setContentView(R.layout.activity_szabaly); 
} 

Этот код только меняет вид. Чтобы начать новую деятельность, вам нужно создать новый класс, который расширяет Activity (также как MainActivity) и регистрирует его в AndroidManifest.xml.

Тогда вы будете иметь возможность начать новую деятельность на клик по следующему

public void ButtonOnClick (View v) { 
    Intent i = new Intent(this, NewActivity.class); 
    startActivity(i); 
} 

См this вопрос более подробно о запуске нового процесса с нажатием кнопки.