Praktikum 2 – Activity

Pada post kali ini memperbaiki bug pada praktikum sebelumnya dengan membuat project baru. Error pada praktikum sebelumnya terjadi karena sebelumnya gradle belum terdownload secara keseluruhan, karena terkendala koneksi internet sehingga pada project sebelumnya mengalami error ketika menghubungkan pada gradle.

Pada post kali ini akan mencoba membuat 2 activity dan membuat beberapa perintah sederhana didalamnya.

1. Pertama akan mengedit MainActivity.java yang telah dibuat ketika membuat project baru. Berikut akan ditampilkan bagian –  bagian yang perlu ditambahkan dan diedit:

  • Package – package yang diperlukan:
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
  • Menambah instance variable untuk membuat Counter sebagai penanda state dalam activity:
public static final String REQUEST_RESULT="REQUEST_RESULT";
static final String KEY_COUNTER = "COUNTER";
private int mCounter = 0;
  • Mengedit method onCreate untuk memanggil Counter yang tersimpan pada state sebelumnya dengan nilai default 0:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SharedPreferences settings = getPreferences(MODE_PRIVATE);
    int defaultCounter = 0;
    mCounter = settings.getInt(KEY_COUNTER, defaultCounter);
}
  • Menambahkan method launchIntent untuk melakukan redirect ke suatu halaman web dan dibuka di browser yang terinstall di Smartphone:
public void launchIntent(View view){
    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.setData(Uri.parse("https://if.mipa.uns.ac.id"));
    startActivity(intent);
}
  • Menambahkan method switchActivity untuk berpindah ke activity kedua yang akan dibuat. Untuk menambahkan activity pilih File -> New -> Activity -> Empty Activity , pada aplikasi Android Studio. Activity kedua ini diberi nama SecondActivity:
public void switchActivity(View view){
    EditText editText = (EditText)findViewById(R.id.editText1);
    String text = editText.getText().toString();
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra(Intent.EXTRA_TEXT,text);
    startActivityForResult(intent,1);
}
  • Menambahkan method onActivityResult untuk menampilkan text yang diinputkan pada text field:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode==RESULT_OK) {
        Toast.makeText(this, data.getStringExtra(REQUEST_RESULT), Toast.LENGTH_LONG).show();
    }
}
  • Menambahkan method clickCounter untuk menampilkan menambahkan nilai counter dan menampilkannya:
public void clickCounter(View view){
    mCounter++;
    ((TextView)findViewById(R.id.textViewCounter)).setText("Counter: " + Integer.toString(mCounter));
}
  • Menambahkan method onRestoreIntanceState untuk menyimpan nilai counter pada state Restore agar ketika Activity di create kembali misal setelah layar dirubah menjadi landscape, nilai Counter tetap tersimpan:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    mCounter=savedInstanceState.getInt(KEY_COUNTER);
}
  • Menambahkan method onPause untuk menyimpan nilai Counter pada state pause sehingga ketika aplikasi pada state Pause misal pengguna membuka aplikasi lainnya dan system membutuhkan memory lebih sehingga aplikasi ini dihentikan sementara, ketika pengguna membuka aplikasi ini kembali nilai Counter akan tetap tersimpan:
@Override
protected void onPause(){
    super.onPause();
    SharedPreferences settings = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt(KEY_COUNTER, mCounter);
    editor.commit();
}

2. Kemudian akan mengedit file xml untuk acitivity pertama ini di activity_main.xml menjadi. Layout yang digunakan yaitu ConstraintLayout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText1"
        app:layout_constraintTop_toBottomOf="@id/button"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Launch Browser"
        android:id="@+id/button"
        android:onClick="launchIntent"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button2"
        android:text="Launch Second Activity"
        app:layout_constraintLeft_toRightOf="@+id/button"
        android:onClick="switchActivity"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/buttonCount"
        android:text="Count"
        android:onClick="clickCounter"
        app:layout_constraintTop_toBottomOf="@+id/editText1"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textViewCounter"
        app:layout_constraintTop_toBottomOf="@+id/buttonCount"
        />

</android.support.constraint.ConstraintLayout>

3. Mengedit activity kedua yang telah dibuat pada SecondActivity.java, sebagai berikut:

  • Package – package yang perlu ditambahkan:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
  • Mengedit method onCreate untuk menerima hasil input dari text field pada activity pertama:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    TextView textView = findViewById(R.id.textView1);
    if(getIntent() != null && getIntent().hasExtra(Intent.EXTRA_TEXT)){
        textView.setText(getIntent().getStringExtra(Intent.EXTRA_TEXT));
    }
}
  • Menambahkan method clickClose untuk menampilkan notifikasi yang berisi hasil input sebelumnya pada Toast dan menutup activity kedua sehingga kembali ke activity pertama:
public void clickClose(View view){
    Intent returnIntent = new Intent();
    returnIntent.putExtra(MainActivity.REQUEST_RESULT, getIntent().getStringExtra(Intent.EXTRA_TEXT));
    setResult(RESULT_OK, returnIntent);
    finish();
}

4. mengedit file xml untuk activity kedua ini pada activity_second.xml. Layout yang digunakan juga sama yaitu ConstraintLayout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SecondActivity">

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

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/buttonClose"
        android:text="Close"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="clickClose"
        app:layout_constraintTop_toBottomOf="@id/textView1"
        />

</android.support.constraint.ConstraintLayout>

5. Tampilan Aplikasi yang dibuat sebagai berikut:

 

 

 

 

 

 

Activity 1                                      Activity 2

Leave a Reply

Your email address will not be published. Required fields are marked *