2012-03-12 3 views
1

В принципе, я собираюсь включить еще 14 кнопок в это, и все они будут работать в одном и том же режиме, только с изменением числа оборотов во втором действии. Поэтому я не хочу создавать объект Intent для каждой кнопки, чтобы привести к такой же активности (поскольку это замедляет приложение). Поэтому я назначил метки кнопке, чтобы получить идентификатор и попытался передать этот идентификатор новому действию. Но это не работает. AVD показывает только первое действие и ничего не происходит после нажатия на кнопку.Невозможно переключиться на другую активность после нажатия кнопки

Мой главный экран (Test1) деятельности:

public class Test1Activity extends Activity { 


public static final String pass="com.sanjay.test1._clicked"; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
Button button1=(Button) findViewById(R.id.button1); 
Button button2=(Button) findViewById(R.id.button2); 

button1.setId(1); 
button2.setId(2); 

button1.setOnClickListener(new MyOnClickListener()); 
button2.setOnClickListener(new MyOnClickListener()); 

} 
private class MyOnClickListener implements OnClickListener{ 
@Override 
public void onClick(View v) 
{ 
int id=v.getId(); 
Intent i=new Intent(Test1Activity.this,Sanjay.class); 
i.putExtra(pass, id); 

} 

} 
} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Length" /> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Weight" /> 

</LinearLayout> 

второй класс (Санджай) Активность:

public class Sanjay extends Activity { 

/** Called when the activity is first created. */ 
int a; 
TextView text; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second); 

    text=(TextView) findViewById(R.id.text); 
    a=getIntent().getExtras().getInt(Test1Activity.pass); 

    text.setText(" "+a); 
    // TODO Auto-generated method stub 
} 

} 

Second.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 

AndroidManifest.xml

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

<uses-sdk android:minSdkVersion="15" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".RotationActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 
+0

Вы создали намерение, но не начали свою деятельность. поэтому начните работу с сообщения о намерениях. Intent i = new Intent (...); startActivity (я); – Jayabal

ответ

1

Вам нужно добавить startActivity (I), в функции OnClick, если не деятельность никогда не запустится. И вы должны добавить его в свой манифест Android.

Как это:

private class MyOnClickListener implements OnClickListener{ 
@Override 
public void onClick(View v) 
{ 
int id=v.getId(); 
Intent i=new Intent(Test1Activity.this,Sanjay.class); 
i.putExtra(pass, id); 
startActivity(i); 

} 

} 

И манифесте:

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

<uses-sdk android:minSdkVersion="15" /> 

<application 
android:icon="@drawable/ic_launcher" 
android:label="@string/app_name" > 
<activity 
    android:name=".RotationActivity" 
    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=".Sanjay" 
    android:label="Sanjay Label"> 
</activity> 
</application> 

</manifest> 
+0

Спасибо, Люсия! Я полностью забыл о начале деятельности, но не знал, что мне нужно включить его в Манифест. Работа Замечательно сейчас: D @Lucia – Exorcist

1

Ваша активность Sanjay нужна запись в манифесте.

<activity 
     android:name=".Sanjay" 
     android:label="@string/app_name" > 
</activity> 
0

Вы не должны использовать setId() для хранения произвольных данных. Это идентификатор, который используется системой для получения ссылки на ваши представления.

View имеет метод setTag(), предназначенный для хранения произвольных данных, подобных этому. Вы должны использовать Tag вместо Id. как это:

button1.setTag(1); 
button2.setTag(2); 

, а затем вытащить их обратно таким образом:

int id= (Integer)v.getTag(); 
+0

Вы имели в виду 'int id = (Integer) v.setTag (1);' И это также присвоит значение '1' первой кнопке? – Exorcist

+0

нет, то есть getTag() не задан. Вам не нужно передавать какой-либо параметр. Но вам нужно это сделать {g} etTag() – FoamyGuy

+0

Спасибо за совет. Я это попробую.Очень признателен. – Exorcist

0

Вы не декларировал свою вторую деятельность в андроида манифеста. Добавьте это внутри <application> тег:

<activity android:name=".Sanjay"> 
</activity> 

Как совет держать всегда глаза на LogCat, в этом случае вы нашли бы предупреждающее сообщение о том, в чем проблема.

+0

Можете ли вы предложить, как использовать Logcat? @YuviDroid – Exorcist

+0

Конечно. В Eclipse выберите «Окно», «Открыть перспективу», «DDMS» (если вы не найдете его «Другое ..»). Затем внизу вы увидите свой вид LogCat. Затем, когда вы выбираете подключенное устройство в представлении «Устройства», LogCat начнет обновление, и вы увидите все сообщения журнала. – YuviDroid

+0

Я не имел в виду запуск LogCat. Я имел в виду извлечение из него информации. Вы видите, что я только начинаю с Android. Спасибо в ожидании. – Exorcist

Смежные вопросы