2015-04-03 25 views
0

我有一個應用程序有一個TableLayout與60 texviews。 用戶可以觸摸它們並開始拍攝點擊的TextView的文字和背景顏色。 但該應用程序有一個bug,有些時候所有TextView採取的第一個輸入顏色的顏色和代碼內我沒有一個循環,指定顏色。 我認爲,問題來自屏幕的方向(可能?)。 因爲包含TableLayout的活動是landscapeDialogportrait。 事實上,當對話框在它後面開始時,有一個活動可以通過對話框改變其方向,所有的文字視圖都會改變它們的顏色。 我該如何避免這個錯誤? 爲什麼發生這種情況?Android有什麼方法可以在定位更改時不浪費佈局?

胡亞蓉景觀:

public class ActivitySetOrario extends ActionBarActivity { 

//Static perch� cosi non perdo i dati inseriti in precedenza! 
static int clickedTextViewId; // Declare TextView as class level member field 

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

    MySQLiteHelper db = new MySQLiteHelper(this); 

    //Get all materie inside database 
    List<Materia> materia = db.getAllMaterie(); 
    //change all TextView inputed from user 
    if(materia.isEmpty()){ 
     //do nothing 
    }else { 
     for (Materia mat : materia) { 
      //Change all the TextView with values stored inside the database 
      TextView changedtextview = (TextView) findViewById(mat.getID()); 
      changedtextview.setText(mat.getMateria()); 
      changedtextview.setBackgroundColor(mat.getColor()); 
     } 
    } 


}//Fine oncreate 

//Prende indietro la materia aggiunta dall'ActivityAddMateria 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == 1) { 
     if (resultCode == RESULT_OK) { 

      MySQLiteHelper db = new MySQLiteHelper(this); 
      String result = data.getStringExtra("result"); //Take the materia from Dialog 
      int color = data.getIntExtra("color", 1); //Take the color from Dialog 

      //Here i need to recognize row and column 
      db.addMateria(new Materia(clickedTextViewId, result, color)); 

      TextView clickedtextView = (TextView) findViewById(clickedTextViewId); //(TextView) view; 
      clickedtextView.setText(result); 
      clickedtextView.setBackgroundColor(color); 
     } 

     if (resultCode == RESULT_CANCELED) { 
      //Nessuna materia inserita 
     } 
    } 
}//onActivityResult 

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

@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. 

    switch (item.getItemId()) { 
    case R.id.draw_orario: 
     //addMateria(); 
     MySQLiteHelper db = new MySQLiteHelper(this); 
     db.deleteMateria(); 
     onStart(); 
     return true; 
    case R.id.save_data_orario: 
     //SERIALIZZO I DATI CHE DOVRA PRENDERE ActivityOrario 
     backToOrario(); 
     finish(); 
     return true;  
    case R.id.exit_orario: 
     //Torno alla schermata orario annullo ogni modifica NON SERIALIZZO 
     backToOrario(); 
     finish(); 
     return true;  
    case R.id.action_settings: 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

//Torna alla ActivityOrario 
public void backToOrario(){ 
    Intent myIntent = new Intent(ActivitySetOrario.this, ActivityOrario.class); 
    startActivity(myIntent); 
} 

public void addMateria(View v){ 
    //To get ID of your TextView do this 
    clickedTextViewId = v.getId(); 
    //StartActivityForResult perche mi aspetto la materia inserita dall'altra activity 
    Intent myIntent = new Intent(ActivitySetOrario.this, ActivityAddMateria.class); 
    ActivitySetOrario.this.startActivityForResult(myIntent, 1); 
} 
} 

對話框畫像活動:

public class ActivityAddMateria extends Activity { 

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

    final Button exit_button = (Button) findViewById(R.id.exit_dialog_materia); 
    exit_button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      //No input 
      Intent returnIntent = new Intent(); 
      setResult(RESULT_CANCELED, returnIntent); 
      //Exit from Dialog 
      finish(); 
     } 
    }); 

    final Button accept_button = (Button) findViewById(R.id.add_materia); 
    accept_button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      //Find EditText for take data 
      EditText nome_materia = (EditText)findViewById(R.id.nome_materia); 
      //Put result into variable result that is send back 
      String result = nome_materia.getText().toString(); 


      RadioGroup radioGroup = (RadioGroup) findViewById(R.id.group1); 
      int radioButtonID = radioGroup.getCheckedRadioButtonId(); 
      View radioButton = radioGroup.findViewById(radioButtonID); 

      Drawable background = radioButton.getBackground(); 
      if (background instanceof ColorDrawable) { 
       int color = ((ColorDrawable) background).getColor(); 
       Intent returnIntent = new Intent(); 
       returnIntent.putExtra("result",result).putExtra("color",color); 
       setResult(RESULT_OK,returnIntent); 
      } 
      // Exit to Dialog 
      finish(); 
     } 
    }); 

} 

}

的第一個活動的XML:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/blue_orario" 
android:id="@+id/table"> 
<TableRow 
    android:id="@+id/dayrow" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="35dp" > 
    <TextView 
     android:id="@+id/d1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Lun." 
     android:textColor="@color/text_orario" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
    <TextView 
     android:id="@+id/d2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Mar." 
     android:textColor="@color/text_orario" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
    <TextView 
     android:id="@+id/d3" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Mer." 
     android:textColor="@color/text_orario" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
    <TextView 
     android:id="@+id/d4" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Gio." 
     android:textColor="@color/text_orario" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
    <TextView 
     android:id="@+id/d5" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Ven." 
     android:textColor="@color/text_orario" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
    <TextView 
     android:id="@+id/d6" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Sab." 
     android:textColor="@color/text_orario" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
</TableRow> 
<ScrollView 
android:id="@+id/scrollorario" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 
<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 
      <TableRow 
       android:id="@+id/prima_riga" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 
       <TextView 
        android:id="@+id/h1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="1" 
        android:textColor="@color/text_orario" 
        android:textAppearance="?android:attr/textAppearanceLarge" /> 
       <TextView 
        android:id="@+id/mat11" 
        android:layout_width="50dp" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="20dp" 
        android:gravity="center" 
        android:clickable="true" 
        android:onClick="addMateria" 
        android:background="@color/grigio_chiaro" 
        android:text=""/> 
       <TextView 
        android:id="@+id/mat12" 
        android:layout_width="50dp" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="33dp" 
        android:gravity="center" 
        android:clickable="true" 
        android:onClick="addMateria" 
        android:background="@color/grigio_chiaro" 
        android:text="" /> 
       <TextView 
        android:id="@+id/mat13" 
        android:layout_width="50dp" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="33dp" 
        android:gravity="center" 
        android:clickable="true" 
        android:onClick="addMateria" 
        android:background="@color/grigio_chiaro" 
        android:text="" /> 
       <TextView 
        android:id="@+id/mat14" 
        android:layout_width="50dp" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="33dp" 
        android:gravity="center" 
        android:clickable="true" 
        android:onClick="addMateria" 
        android:background="@color/grigio_chiaro" 
        android:text="" /> 
       <TextView 
        android:id="@+id/mat15" 
        android:layout_width="50dp" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="33dp" 
        android:gravity="center" 
        android:clickable="true" 
        android:onClick="addMateria" 
        android:background="@color/grigio_chiaro" 
        android:text="" /> 
       <TextView 
        android:id="@+id/mat16" 
        android:layout_width="50dp" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="33dp" 
        android:gravity="center" 
        android:clickable="true" 
        android:onClick="addMateria" 
        android:background="@color/grigio_chiaro" 
        android:text="" /> 
      </TableRow> 
      <!--TOO LONG THE XML I CUT IT THE OTHER ROW ARE THE SAME--> 
     </LinearLayout> 
</ScrollView> 

</TableLayout> 

一些screenshoot: First item added Dialog with normal Actvity behind All Textviews changed! (not good) The result that i want

+0

您需要添加一些代碼。 – 2015-04-03 20:11:03

+0

你需要什麼?活動和對話?或一些XML呢? – Mario 2015-04-03 20:15:57

+0

所以只有一個方向:設備的方向。除非你要求改變方向(在你的清單中),否則在這裏沒有方向改變!此外,你正在做更復雜的事情:而不是使用單獨的活動(對話活動),只需在同一活動中使用對話框即可。 – 2015-04-03 20:26:47

回答

0

你不應該使用在數據庫中textviews的ID:他們可以將應用不同的編譯間改變。這可能是罪魁禍首。但是,它們全部被設置的唯一方法是在for循環中:您應該驗證您的數據庫是否正確,並確認每次都沒有運行循環。

+0

我看到這個錯誤發生在我改變活動時,由於太活躍而導致問題...這是可能的? – Mario 2015-04-05 16:14:07

相關問題