J'ai hérité d'un projet Android Studio avec essentiellement aucune expérience avec la programmation Java. J'ai vécu et enseigné moi-même en utilisant des didacticiels en ligne gratuits et le guide du Big Nerd Ranch et je sais comment passer à différentes vues .xml en utilisant des classes .java associées, mais je veux ouvrir une nouvelle vue .xml associée à la même classe .java. Fondamentalement, je veux juste modifier l'application que j'ai qui lit des informations à partir d'un périphérique Bluetooth et affiche les mesures dans un TextView avec un affichage "Pass/Fail" pour avoir un affichage pass/fail et un bouton "View Log" Lorsque vous cliquez dessus, vous accédez à un nouveau fichier .xml contenant le TextView avec tous les résultats. J'essaie d'éviter d'utiliser une classe .java différente parce que je veux que tous les éléments aient les mêmes fonctions, juste sur des vues .xml différentes, et je suis inquiet de déplacer tout ce que j'ai déjà dans un nouveau La classe .java créera simplement plus de problèmes que j'en ai déjà.Comment puis-je basculer entre plusieurs vues en utilisant une seule classe java?
Je ne sais pas s'il est nécessaire, mais voici mon code: A partir de l'écran de mon départ
frament_bluetooth_scanner.xml:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/go_to_log"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/view_log"
android:textSize="20dp"/>
<View
android:id="@+id/view"
android:layout_width="fill_parent"
android:layout_height="2dp"
android:background="#ccc"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:paddingTop="@dimen/margin_small"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:paddingBottom="4dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal">
<Button
android:id="@+id/button_present"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffc4ab"
android:clickable="false"
android:padding="16dp"
android:text="NO TAGGANT DETECTED"
android:textSize="26dp"
/>
</LinearLayout>
button_present
à la fois active le test Bluetooth et affiche le pass/fail résultats. Il existait et fonctionne comme prévu.
go_to_log
est un bouton j'ajouté et je le veux cliquer pour me prendre à la vue suivante:
view_list.xml:
<FrameLayout
android:orientation="horizontal"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:visibility="visible"
android:layout_gravity="center_horizontal">
<Button
android:layout_width="fill_parent"
android:layout_height="40dp"
android:text="@string/clear_log"
android:id="@+id/button_clear_log" />
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="40dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:id="@+id/scanLogView"
android:maxLines = "4096"
android:text="@string/app_name"
android:scrollbars = "vertical"
android:layout_gravity="center_horizontal"/>
</FrameLayout>
Tout ce code était à l'origine dans le fichier fragment_bluetooth_scanner.xml
et tout a fonctionné comme prévu. Le seul problème est que le TextView
était difficile à lire car il affichait des informations pour tous les tests jusqu'à ce qu'il soit effacé, et toutes les informations ne rentraient pas à l'écran même pour un seul test. Je veux le changer pour être plus convivial.
Le fichier .java principal est assez long, donc je vais poster les parties pertinentes de celui-ci. De ScannerFragment.java
:
@Override
public void onViewCreated(View view, @Nullable Bundle
savedInstanceState) {
SP = PreferenceManager.getDefaultSharedPreferences(getContext());
mPowerOffButton = (Button) view.findViewById(R.id.button_poweroff);
mDisconnectButton = (Button) view.findViewById(R.id.button_disconnect);
mConnectButton = (Button) view.findViewById(R.id.button_connect);
mPresence = (Button) view.findViewById(R.id.button_present);
mBattery = (ProgressBar) view.findViewById(R.id.progressBar);
mBlinkConnect = (Button) view.findViewById(R.id.button_connectionblink);
mBlinkData = (Button) view.findViewById(R.id.button_communication);
mClearLog = (Button) view.findViewById(R.id.button_clear_log);
mDeviceName = (Button) view.findViewById(R.id.button_devicename);
mDeviceSN = (Button) view.findViewById(R.id.button_devicesn);
mBatteryPerc = (TextView) view.findViewById(R.id.label_batterypct);
mReadingLog = (TextView) view.findViewById(R.id.scanLogView);
mReadingLog.setMovementMethod(new ScrollingMovementMethod());
mReadingLog.setText(readFromFile());
mViewLog = (Button)view.findViewById(R.id.go_to_log);
telephonyManager = (TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE);
initLocationService(this.getContext());
final ActionBar actionBar = getActivity().getActionBar();
if (null == actionBar) {
return;
}
final Drawable D = getResources().getDrawable(R.drawable.stardust2);
actionBar.setBackgroundDrawable(D);
actionBar.setTitle("");
}
private void setupScanner() {
Log.d(TAG, "setupScanner()");
// Initialize the send button with a listener that for click events
mPowerOffButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(isIris) {
publishMessage(Constants.COMMAND_POWEROFF_IRIS);
} else {
publishMessage(Constants.COMMAND_POWEROFF);
}
mScannerService.stop();
}
});
// Initialize the send button with a listener that for click events
mDisconnectButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Send a message using content of the edit text widget
publishMessage(Constants.COMMAND_DISCONNECT);
mScannerService.stop();
}
});
// Initialize the send button with a listener that for click events
mConnectButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Send a message using content of the edit text widget
publishMessage(Constants.COMMAND_ON_CONNECT);
}
});
mClearLog.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Send a message using content of the edit text widget
mReadingLog.setText("");
if(SP.getBoolean("writeToFile", true)) {
writeToFile("", "", false);
}
}
});
C'est là toutes les actions existantes ont lieu. La principale chose qui me décourage de créer une nouvelle classe .java est que mReadingLog
est utilisé tout au long de cette classe, et je ne comprends pas très bien lire/écrire des fichiers texte à ce stade, donc je veux éviter de modifier tout ce qui doit faire avec ce processus.
Je suis passé par des tutoriels dans le passé comme this one, mais je ne trouve rien sur la façon d'ouvrir un nouveau fichier xml
tout en associant avec la même classe .java
. Est-ce possible?
Merci pour la réponse! Cela fonctionne extrêmement bien et m'a sauvé tellement de temps et de maux de tête. Merci! –