testImplementation 'junit:junit:4.13.2' | testImplementation 'junit:junit:4.13.2' | ||||
androidTestImplementation 'androidx.test.ext:junit:1.1.5' | androidTestImplementation 'androidx.test.ext:junit:1.1.5' | ||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' | androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' | ||||
implementation "androidx.startup:startup-runtime:1.1.1" | |||||
} | } |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||
xmlns:tools="http://schemas.android.com/tools"> | xmlns:tools="http://schemas.android.com/tools"> | ||||
<!-- <!– If your app targets Android 13 (API level 33)--> | |||||
<!-- or higher, you must declare the NEARBY_WIFI_DEVICES permission. –>--> | |||||
<!-- <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"--> | |||||
<!-- <!– If your app derives location information from Wi-Fi APIs,--> | |||||
<!-- don't include the "usesPermissionFlags" attribute. –>--> | |||||
<!-- android:usesPermissionFlags="neverForLocation" />--> | |||||
<uses-permission | |||||
android:required="true" | |||||
android:name="android.permission.ACCESS_FINE_LOCATION"/> | |||||
<!-- If any feature in your app relies on precise location information, | |||||
don't include the "maxSdkVersion" attribute. --> | |||||
<uses-permission | |||||
android:required="true" | |||||
android:name="android.permission.ACCESS_WIFI_STATE"/> | |||||
<uses-permission | |||||
android:required="true" | |||||
android:name="android.permission.CHANGE_WIFI_STATE"/> | |||||
<uses-permission | |||||
android:required="true" | |||||
android:name="android.permission.INTERNET"/> | |||||
<application | <application | ||||
android:allowBackup="true" | android:allowBackup="true" | ||||
android:dataExtractionRules="@xml/data_extraction_rules" | android:dataExtractionRules="@xml/data_extraction_rules" |
package de.oklein.android.ueberwachungssystem.Logger; | |||||
import android.util.Log; | |||||
import android.widget.TextView; | |||||
import java.io.PrintWriter; | |||||
import java.io.StringWriter; | |||||
public class Logger { | |||||
private TextView textView; | |||||
private StringBuffer sb = new StringBuffer(); | |||||
private String tag; | |||||
public Logger(String tag, TextView textView, String logInitText) { | |||||
this.tag = tag; | |||||
this.textView = textView; | |||||
sb.append(logInitText); | |||||
} | |||||
public void log(String s) { | |||||
Log.d(tag, s); | |||||
sb.append(s).append("\n"); | |||||
if (textView != null) { | |||||
textView.setText(sb.toString()); | |||||
} | |||||
} | |||||
public void log(Exception e) { | |||||
StringWriter sw = new StringWriter(); | |||||
e.printStackTrace(new PrintWriter(sw)); | |||||
log(sw.toString()); | |||||
} | |||||
public void clearLog() { | |||||
sb.setLength(0); | |||||
if (textView != null) { | |||||
textView.setText(""); | |||||
} | |||||
} | |||||
public String getLoggedText() { | |||||
return sb.toString(); | |||||
} | |||||
} |
package de.oklein.android.ueberwachungssystem; | package de.oklein.android.ueberwachungssystem; | ||||
import androidx.fragment.app.Fragment; | |||||
import androidx.fragment.app.FragmentTransaction; | |||||
import androidx.appcompat.app.AppCompatActivity; | import androidx.appcompat.app.AppCompatActivity; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.util.Log; | |||||
import android.view.LayoutInflater; | |||||
import android.view.View; | |||||
import android.view.ViewGroup; | |||||
import android.widget.Button; | |||||
import android.widget.EditText; | |||||
import android.widget.ListView; | |||||
import android.widget.TextView; | |||||
public class MainActivity extends AppCompatActivity { | |||||
public class MainActivity extends AppCompatActivity { | |||||
private Fragment aktuellesFragment; | |||||
private void log(String nachricht) { | |||||
Log.d(this.getClass().getSimpleName(), nachricht); | |||||
} | |||||
@Override | @Override | ||||
protected void onCreate(Bundle savedInstanceState) { | protected void onCreate(Bundle savedInstanceState) { | ||||
super.onCreate(savedInstanceState); | super.onCreate(savedInstanceState); | ||||
setTitle( this.getClass().getSimpleName()); | |||||
setContentView(R.layout.activity_main); | setContentView(R.layout.activity_main); | ||||
//penis | |||||
} | |||||
public void onClickZeigeFragment1(View view) { | |||||
Button button = (Button) view; | |||||
log(button.getText() + " ausgewählt"); | |||||
zeigeFragment(Fragment1.erstellen("Fragment 1 wurde angeklickt")); | |||||
} | |||||
public void onClickZeigeFragment2(View view) { | |||||
Button button = (Button) view; | |||||
log(button.getText() + " ausgewählt"); | |||||
zeigeFragment(Fragment2.erstellen("Fragment 2 wurde angeklickt")); | |||||
} | |||||
public void onClickEntferneFragment(View view) { | |||||
entferneFragment(); | |||||
} | |||||
private void zeigeFragment(Fragment fragment) { | |||||
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); | |||||
ft.replace(R.id.frame, fragment); | |||||
ft.commit(); | |||||
aktuellesFragment = fragment; | |||||
} | |||||
private void entferneFragment() { | |||||
if (aktuellesFragment != null) { | |||||
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); | |||||
ft.remove(aktuellesFragment); | |||||
ft.commit(); | |||||
aktuellesFragment = null ; | |||||
} | |||||
} | |||||
public static class Fragment1 extends Fragment { | |||||
private String text; | |||||
private final static String KEY_TEXT = "KEY_TEXT"; | |||||
private void log(String nachricht) { | |||||
Log.d(this.getClass().getSimpleName(), nachricht); | |||||
} | |||||
@Override | |||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { | |||||
log("onCreateView"); | |||||
View view = inflater.inflate(R.layout.fragment1, container, false); | |||||
TextView textView = (TextView) view.findViewById(R.id.textView); | |||||
textView.setText(text); | |||||
return view; | |||||
} | |||||
public static Fragment1 erstellen(String text) { | |||||
Fragment1 fragment = new Fragment1(); | |||||
Bundle b = new Bundle(); | |||||
b.putString(KEY_TEXT, text); | |||||
fragment.setArguments(b); | |||||
return fragment; | |||||
} | |||||
@Override | |||||
public void onCreate(Bundle bundle) { | |||||
super .onCreate(bundle); | |||||
Bundle args = getArguments(); | |||||
if (args != null ) { | |||||
text = args.getString(KEY_TEXT); | |||||
log("onCreate: text=" + text); | |||||
} else { | |||||
log("onCreate"); | |||||
} | |||||
} | |||||
} | |||||
public static class Fragment2 extends Fragment { | |||||
private String text; | |||||
private final static String KEY_TEXT = "KEY_TEXT" ; | |||||
private void log(String nachricht) { | |||||
Log.d(this.getClass().getSimpleName(), nachricht); | |||||
} | |||||
@Override | |||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { | |||||
log( "onCreateView" ); | |||||
View view = inflater.inflate(R.layout.fragment2, container, false ); | |||||
EditText editText = (EditText) view.findViewById(R.id.editText1); | |||||
editText.setText(text); | |||||
return view; | |||||
} | |||||
public static Fragment2 erstellen(String text) { | |||||
Fragment2 fragment = new Fragment2(); | |||||
Bundle b = new Bundle(); | |||||
b.putString(KEY_TEXT, text); | |||||
fragment.setArguments(b); | |||||
return fragment; | |||||
} | |||||
@Override | |||||
public void onCreate(Bundle bundle) { | |||||
super.onCreate(bundle); | |||||
Bundle args = getArguments(); | |||||
if (args != null) { | |||||
text = args.getString(KEY_TEXT); | |||||
log("onCreate: text=" + text); | |||||
} else { | |||||
log("onCreate"); | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
<?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
xmlns:app="http://schemas.android.com/apk/res-auto" | |||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
xmlns:tools="http://schemas.android.com/tools" | xmlns:tools="http://schemas.android.com/tools" | ||||
android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
android:layout_height="match_parent" | android:layout_height="match_parent" | ||||
tools:context=".MainActivity"> | |||||
tools:context="de.oklein.android.ueberwachungssystem.MainActivity" | |||||
android:background="@android:color/holo_orange_light"> | |||||
<TextView | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="Hello World!" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" /> | |||||
<Button | |||||
android:id="@+id/button1" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
android:layout_alignParentStart="true" | |||||
android:layout_alignParentTop="true" | |||||
android:text="Zeige Fragment 1" | |||||
android:onClick="onClickZeigeFragment1"/> | |||||
<Button | |||||
android:id="@+id/btnFordereRechte" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
android:layout_alignParentStart="true" | |||||
android:layout_below="@+id/button1" | |||||
android:text="Zeige Fragment 2" | |||||
android:onClick="onClickZeigeFragment2"/> | |||||
<Button | |||||
android:id="@+id/buttonEntferneFragment" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
android:layout_alignParentStart="true" | |||||
android:layout_below="@+id/btnFordereRechte" | |||||
android:text="Entferne Fragment" | |||||
android:onClick="onClickEntferneFragment"/> | |||||
<FrameLayout | |||||
android:id="@+id/frame" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:layout_alignParentStart="true" | |||||
android:layout_below="@+id/buttonEntferneFragment"> | |||||
</FrameLayout> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> | |||||
</RelativeLayout> |
<?xml version="1.0" encoding="utf-8"?> | |||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:gravity="center_horizontal" | |||||
android:orientation="vertical" | |||||
android:background="@android:color/holo_green_light"> | |||||
<TextView | |||||
android:id="@+id/textView" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:textAppearance="?android:attr/textAppearanceLarge"/> | |||||
</LinearLayout> |
<?xml version="1.0" encoding="utf-8"?> | |||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:gravity="center_horizontal" | |||||
android:orientation="vertical" | |||||
android:background="@android:color/holo_blue_light" > | |||||
<EditText | |||||
android:id="@+id/editText1" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:ems="10" | |||||
android:textStyle="italic" | |||||
android:inputType="textMultiLine" > | |||||
<requestFocus /> | |||||
</EditText> | |||||
</LinearLayout> |