2016-03-20 3 views
0

В приложении, которое я пытаюсь разработать, у меня есть макет featured_workshop_layout с CardViews с кнопками. Каждая кнопка отображает один и тот же макет, но с разными данными на основе каждой карты. Я попробовал метод ниже, но продолжаю получать FATAL Exception.Как изменить значение TextView из другой активности?

Проверьте button1 здесь (featured_workshop_layout)

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<LinearLayout 

android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 
<!-- android:background="#E1F5FE"> 
A CardView that contains a TextView --> 
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view" 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:layout_gravity="center" 
    android:layout_margin="8dp" 
    android:padding="10dp" 
    card_view:cardCornerRadius="4dp" 
    card_view:cardElevation="4dp"> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/titleTextView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/button1" 
      android:layout_alignParentTop="true" 
      android:layout_alignStart="@+id/button1" 
      android:paddingBottom="16dp" 
      android:paddingTop="24dp" 
      android:text="Android 2.0" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textSize="24sp" /> 

     <TextView 
      android:id="@+id/contentTextView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/titleTextView1" 
      android:layout_alignStart="@+id/titleTextView1" 
      android:layout_centerVertical="true" 
      android:paddingBottom="16dp" 
      android:paddingTop="16dp" 
      android:text="Venue: SJT 311 \n Time: 29/10/2015 5-7pm \n Note: Bring charged laptop" 
      android:textSize="14sp" /> 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginLeft="23dp" 
      android:layout_marginStart="23dp" 
      android:background="#0000" 
      android:onClick="showRegister" 
      android:tag="SITEAndroid 2.0" 
      android:padding="8dp" 
      android:text="Register" 
      android:textColor="#FFA000" /> 


    </RelativeLayout> 
</android.support.v7.widget.CardView> 

<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view1" 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:layout_gravity="center" 
    android:layout_margin="8dp" 
    android:padding="10dp" 
    card_view:cardCornerRadius="4dp" 
    card_view:cardElevation="4dp"> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/titleTextView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/button3" 
      android:layout_alignParentTop="true" 
      android:layout_alignStart="@+id/button3" 
      android:paddingBottom="16dp" 
      android:paddingTop="24dp" 
      android:text="IEEE-SPS Core Committee Selections" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textSize="24sp" /> 

     <TextView 
      android:id="@+id/contentTextView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/titleTextView2" 
      android:layout_alignStart="@+id/titleTextView2" 
      android:layout_centerVertical="true" 
      android:paddingBottom="16dp" 
      android:paddingTop="16dp" 
      android:text="Venue: TT 724 \n Time: 30/10/2015 6-7.30pm" 
      android:textSize="14sp" /> 

     <Button 
      android:id="@+id/button3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginLeft="24dp" 
      android:layout_marginStart="24dp" 
      android:background="#0000" 
      android:onClick="showRegister" 
      android:padding="8dp" 
      android:text="Register" 
      android:textColor="#FFA000" /> 


    </RelativeLayout> 
</android.support.v7.widget.CardView> 

<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view2" 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:layout_gravity="center" 
    android:layout_margin="8dp" 
    android:padding="10dp" 
    card_view:cardCornerRadius="4dp" 
    card_view:cardElevation="4dp"> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/textView12" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/button2" 
      android:layout_alignParentTop="true" 
      android:layout_alignStart="@+id/button2" 
      android:paddingBottom="16dp" 
      android:paddingTop="24dp" 
      android:text="IQ VIT DEXTER" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textSize="24sp" /> 

     <TextView 
      android:id="@+id/textView21" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/button2" 
      android:layout_alignStart="@+id/button2" 
      android:layout_centerVertical="true" 
      android:paddingBottom="16dp" 
      android:paddingTop="16dp" 
      android:text="Venue: MB210\n Time: 31/10/2015 5.30pm\nContact: 9484356876" 
      android:textSize="14sp" /> 

     <Button 
      android:id="@+id/button2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginLeft="32dp" 
      android:layout_marginStart="32dp" 
      android:background="#0000" 
      android:onClick="showRegister" 
      android:padding="8dp" 
      android:text="Register" 
      android:textColor="#FFA000" /> 


    </RelativeLayout> 
</android.support.v7.widget.CardView> 

MainActivity.java

public void showRegister(View view) 
{ String site = "SITE"; 
    String taginfo = view.getTag().toString(); 
    System.out.println(taginfo); 
    //check tag content 
    if(taginfo.contains(site)) { 
     System.out.println("tag has keyword site"); 
     RegistrationForm.schoolName.setText(site); 
    } 

    startActivity(new Intent(MainActivity.this, 
      RegistrationForm.class)); 

} 

RegistrationForm.java

public class RegistrationForm extends AppCompatActivity { 

EditText rno; 
EditText name; 
TextView displayTemp; 
MyDBHandler dbHandler; 
public static TextView schoolName; 
public static TextView workshopName; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.registration_form); 
    rno = (EditText)findViewById(R.id.edit_rno); 
    name =(EditText)findViewById(R.id.edit_name); 
    schoolName = (TextView) findViewById(R.id.schoolName); 
    workshopName = (TextView) findViewById(R.id.workshopName); 
    displayTemp = (TextView)findViewById(R.id.textView3); 
    dbHandler = new MyDBHandler(this,null,null,1); 
    displayText(); 

} 

Я объявил TextView как public в RegistrationForm.java, где я хочу отобразить детали. При обращении к нему с MainActivity, чтобы изменить значение, я получаю следующее исключение.

FATAL ИСКЛЮЧЕНИЕ: главный процесса: com.example.intodarkness.vitworkshop, PID: 9770 java.lang.IllegalStateException: Не удалось выполнить метод деятельности на android.view.View $ 1.onClick (Просмотреть .java: 4025) на android.view.View.performClick (View.java:4785) на android.view.View $ PerformClick.run (View.java:19884) на android.os.Handler.handleCallback (обработчик .java: 739) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5343) на java.lang.reflect.Method.invoke (собственный метод) на java .lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:905) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:700) Вызвано: java.lang.reflect.InvocationTargetException по адресу java.lang.reflect.Method.invoke (собственный метод) по адресу java.lang.reflect.Method.invoke (Method.java:372) на android.view.View $ 1.onClick (View.java:4020) на android.view.View.performClick (View.java:4785) на android.view.View $ PerformClick.run (View.java:19884) на android.os.Handler.handleCallback (Handler.java:739) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:135) at android.app.ActivityThread.main (ActivityThread.java:5343) в java.lang.reflect.Method.invoke (собственный метод) по адресу java.lang.reflect.Method.invoke (Method.java:372) at com .andr oid.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:905) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:700) Вызвано: java.lang.NullPointerException: попытка invoke virtual method 'void android.widget.TextView.setText (java.lang.CharSequence) 'на нулевой ссылке объекта на com.example.intodarkness.vitworkshop.MainActivity.showRegister (MainActivity.java:52) на java.lang.reflect.Method.invoke (собственный метод) на java.lang .reflect.Method.invoke (Method.java:372) на android.view.View $ 1.onClick (View.java:4020) на android.view.View.performClick (View.java:4785) на android. view.View $ PerformClick.run (View.java:19884) на android.os.Handler.handleCallback (Handler.java:739) на android.os.Handler.dispatchMessage (Handler.java:95) a t android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5343) на java.lang.reflect.Method.invoke (собственный метод) на java. lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:905) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:700)

ответ

0

Решено. Вместо того, чтобы пытаться получить доступ к обязательным полям из MainActicity, я получил доступ к необходимой информации из CardView в MainActivity и выполнил остальную часть операций в форме регистрации, где мне удалось получить доступ к TextViews registration_form.

Я использовал операторы System.out.println(), чтобы найти порядок выполнения, где я узнал, что Activity вызывается только после операторов setText, поэтому я получил ошибку nullException.

1

Я думаю, ваша проблема здесь:

if(taginfo.contains(site)) { 
    System.out.println("tag has keyword site"); 
    RegistrationForm.schoolName.setText(site); 
} 

startActivity(new Intent(MainActivity.this, 
     RegistrationForm.class)); 

Я бы порекомендовал вам отправить параметр из одной активности в другую, используя Intent.putExtra() вместо переменной static.

Здесь https://stackoverflow.com/a/3510771/2219237 вы можете найти пример, как это сделать.

+0

Но почему этот метод не работает? http://stackoverflow.com/questions/6605588/changing-text-from-another-activity – nandu

+0

Посмотрите на ссылку, которую вы предоставили ", но убедитесь, что вы инициализируете этот объект TextView перед использованием в другой деятельности ..." , В вашем случае вы пытаетесь установить текст в 'schoolName', но' RegistrationForm.onCreate() 'еще не вызывается, поэтому значение' schoolName' равно null. –

+0

любое предложение о том, как его решить? Я попробовал написать startActivity (новый Intent (this, RegistrationForm.class)); в самой первой строке вызываемой функции при нажатии кнопки showRegister() – nandu

1

Если вы хотите изменить значение textview в Activity2 Затем, переходя от Activity1 к деятельности2 просто установите значение в Intent.putExtra() и начать свою деятельность и в onCreate() методы Activity2, получить пристальное значение путем вызова getIntent.getExtras().getString('your_key'); и изменить textview стоимость.

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