Tuesday, March 31, 2015

Android - Aplikasi E-Commerce - JSONParser PHP MySql, display data in a ListView and GridView

Catatan ane kali ini masih tentang pembuatan aplikasi yang di jalankan di android yaitu aplikasi e commerce. Dimana data diambil dari database mysql dengan menguunakan JSONParser. Data berupa gambar dan data lainnya yang biasa di gunakan untuk e commerce gitulah ( lagi ndak semangat bikin catatan sebenarnya nih, bro...:p).

Sebernarnya aplikasi ini mau tak ikutin dalam sebuah project di salah satu situs freelance, tapi otak benar-benar lagi mupeng, logika ndak jalan, jadinya ane share () di mari, silahkan lihat videonya bro:



Disini, data yang diambil dari mysql, ane tampilkan dalam dalam bentuk ListView dan Gridview pada android. Detail dan penambahan menu ane sertakan, Udah langsung aja, bro, lihat tampilannya App-nya seperti di bawah berikut :

 
       Item dengan GridView                           Menu Bottom

 
       Item dengan ListView                       AboutUs Dialog

                 Detail Item
        
Berikut untuk input data nya di admin panel web e-commerce, bro..


Berikut juga, data di databasenya di localhost, bro...


Karna jika ane tulis codenya begitu panjang, dan berhubung ane juga lagi ndak semangat untuk jelasin, silahkan download dan pelajari aje filenya di mari (kalo ada yang mau seh) -> Download

Sekian aje, ane lagi kangen lihat rembulan menyapa dengan cahaya indahnya (entah kapan, lagi redup kayaknya..!!!)...:p

Happy Ngopi and Ngoding,,,


Saturday, March 21, 2015

Aplikasi MyLyric - SQLite CRUD Android

Akhirnya matahari kembali bersinar menyinari belahan bumi ini, menyinari embun-embun di ujung dedaunan. Berkilau. Menyejukkan mata.

Mata tak lagi terpejam. Rasa gelisah, resah menghantui pelupuk mata. Menusuk hingga ruang kesabaran jiwa.

Ahh..kemana sang rembulan?.. tak lagi berbagi cahaya!, tak lagi menyinari indahnya malam. meninggalkan kegelapan. hilang dalam sunyi malam. 

Oke, kata-kata mutiaranya segitu aja, :p . Lanjut tutorial karna ane ndak bisa tidur semalam jadinya iseng-iseng mainin eclipse.

Kali ini, Ane berbagi catatan tentang membuat aplikasi MyLyric di Android dengan menggunakan bawaan database SQLite di android. Dimana, disini telah di lengkapi dengan fitur CRUD ( Create, Read, Update dan Delete ).  

Berikut Tampilannya:

                    List Lyric                                       Lyric

                 Tambah Lyric                                 Edit Lyric

   Alert Dialog Update & Delete        Alert Dialog Confirm Delete

Disini ane memanfaatkan beberapa file XML untuk  UI-nya dan beberapa file JAVA, Ane tidak tampilin semua, file-filenya, download aja file lengkapnya di akhir catatatn ini untuk bisa dipelajari atau di kembangkan lagi. 

Berikut file main.xml nya: 

  

    
 
 
 

 
 
 
 
 
     
         
      
 
 
 
    


Berikut file MainActivity.java nya

package com.mylyrik.yonandroid;

import java.util.ArrayList;

import com.mylyrik.yonandroid.adapter.LyrikAdapter;
import com.mylyrik.yonandroid.database.LyrikDB;
import com.mylyrik.yonandroid.model.Lyrik;

import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;


public class MainActivity extends DashBoardActivity {
 
 private ListView lsvLyrikView = null;
 private LyrikAdapter adapter  = null;
 private LyrikDB lyrikdb     = null;
 private SQLiteDatabase db     = null;
 private ArrayList listLyrik = null;
 private EditText txtSearchText = null;
 private TextView txtNoDataLyrik;
 AlertDialog.Builder alertDialogConfirmDelete = null;
 private Lyrik lyrikIWantToDelete = null;
 public static String id       = "";
 public static String judul    = "";
 public static String penyanyi = "";
 public static String isi      = "";
 private static void getId(String id) { MainActivity.id = id; }
 private static void getJudul(String judul) { MainActivity.judul = judul; }
 private static void getPenyanyi(String penyanyi) {MainActivity.penyanyi = penyanyi;}
 private static void getIsi(String isi) { MainActivity.isi = isi; }
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        setContentView(R.layout.main);
        setHeader(getString(R.string.HomeActivityTitle), false, true);
    
        if (getIntent().getBooleanExtra("EXIT", false)) {
            finish();
        }
        
        txtNoDataLyrik = (TextView) findViewById(R.id.txtNoDataLyrik);
        lsvLyrikView   = (ListView) findViewById(R.id.lsvListLyrik);
        lsvLyrikView.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView parent, View view,int position, long id) {
    String _id       = ((TextView) view.findViewById(R.id.txtId)).getText().toString();
    String _judul    = ((TextView) view.findViewById(R.id.txtJudul)).getText().toString();
    String _penyanyi = ((TextView) view.findViewById(R.id.txtPenyanyi)).getText().toString();
    String _isi      = ((TextView) view.findViewById(R.id.txtIsi)).getText().toString();
    getId(_id);
    getJudul(_judul);
    getPenyanyi(_penyanyi);
    getIsi(_isi);
    Intent intent = new Intent(getApplicationContext(), DetailLyrik.class);
       overridePendingTransition( R.anim.slide_in_left, R.anim.slide_out_left );
       startActivity(intent);
   }
  });
        
        refreshListAdapter();
        registerForContextMenu(lsvLyrikView);
        
        txtSearchText = (EditText) findViewById(R.id.searchText);
  txtSearchText.addTextChangedListener( new TextWatcher() {
   
   @Override //we don't need this
   public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
   }
   @Override //we don't need this
   public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
     int arg3) {
   }
   @Override
   public void afterTextChanged(Editable text) {
    refreshListAdapter( text.toString() );
   }
  });
  
  DialogInterface.OnClickListener dialogConfirmDeleteClickListener = new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
          switch (which){
          case DialogInterface.BUTTON_POSITIVE:
           if( lyrikIWantToDelete != null ) {
      Log.i("Log", "item " + lyrikIWantToDelete.getJudul() + " deleted!");
      showToast( "item " + lyrikIWantToDelete.getJudul() + " deleted!" );
      lyrikdb.delete(lyrikIWantToDelete);
      lyrikIWantToDelete = null;
      refreshListAdapter();
           }
              break;
          case DialogInterface.BUTTON_NEGATIVE:
              //No button clicked
              break;
          }
      }
  };
  
  alertDialogConfirmDelete = new AlertDialog.Builder(this);
  alertDialogConfirmDelete.setPositiveButton("Yes", dialogConfirmDeleteClickListener);
  alertDialogConfirmDelete.setNegativeButton("No", dialogConfirmDeleteClickListener);
    }
    
    // TODO Get data from database SQLite
    private void getListLyrik() { 
     lyrikdb = new LyrikDB(getApplicationContext());
  adapter = new LyrikAdapter(this);
  db = lyrikdb.getWritableDatabase();
  lyrikdb.createTable(db, getBaseContext());
  //lyrikdb.generateData(db);
  
    } 
    
    // TODO We need to refresh adapter for every data update. Without it, ListView will never be refreshed
 protected void refreshListAdapter() {
  try {
   getListLyrik();
  } catch(Exception e) {
         Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_SHORT).show();
        } finally {
   listLyrik = lyrikdb.toArray();
   adapter.updatelistLyrik(listLyrik);
   lsvLyrikView.setAdapter(adapter);
   
   if (adapter.getCount() == 0) {
    txtNoDataLyrik.setVisibility(View.VISIBLE);
   } else {
    txtNoDataLyrik.setVisibility(View.GONE);
   }
        }
 }

 // TODO We need to refresh adapter for every data update. Without it, ListView will never be refreshed
 protected void refreshListAdapter(String filterText) {
  listLyrik = lyrikdb.toArray( filterText );
  adapter.updatelistLyrik(listLyrik);
  lsvLyrikView.setAdapter(adapter);
  
  if (adapter.getCount() == 0) {
   txtNoDataLyrik.setVisibility(View.VISIBLE);
  } else {
   txtNoDataLyrik.setVisibility(View.GONE);
  }
 }
 
 @Override
 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo cmInfo) {
  if (v.getId() == R.id.lsvListLyrik) {
   AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) cmInfo;
   menu.setHeaderTitle(listLyrik.get(info.position).getJudul());
   String[] menuItems = { "Update", "Delete" };
   
   for (int menuIndex = 0; menuIndex < menuItems.length; menuIndex++) {
    menu.add(Menu.NONE, menuIndex, menuIndex, menuItems[menuIndex]); 
   }
  }
 }

 @Override
 public boolean onContextItemSelected(MenuItem item) {
  AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
  int menuItemIndex = item.getItemId();
  Lyrik lyrik = listLyrik.get(info.position);

  switch (menuItemIndex) {
  case 0:
   String _id       = lyrik.getId();
   String _judul    = lyrik.getJudul();
   String _penyanyi = lyrik.getPenyanyi();
   String _isi      = lyrik.getIsi();
   getId(_id);
   getJudul(_judul);
   getPenyanyi(_penyanyi);
   getIsi(_isi);
   Intent intent = new Intent(getApplicationContext(), EditLyrik.class);
      overridePendingTransition( R.anim.slide_in_left, R.anim.slide_out_left );
      startActivity(intent);
   break;
  case 1:
   lyrikIWantToDelete = lyrik;
   alertDialogConfirmDelete.setMessage("Delete " + lyrik.getJudul() + "?");
   alertDialogConfirmDelete.show();
   break;
  }
  return true;
 }
 
 @Override
    protected void onDestroy() {
        super.onDestroy();
        if ((lyrikdb != null)) {
         lyrikdb.close();
        }
        if (db != null) {
            db.close();
        }
    }
}

Silahkan download file lengkapnya disini

   

Sunday, March 8, 2015

Belajar Android - Simple SQLite ( Membuat Aplikasi 10Tips Untuk Pendaki Pemula )

Ha, lama rasanya tak update blog tercinta ini. Ibarat makhluk idup kalau ndak di-isi perutnya mungkin dah ko-it, untung aje ini bukan makhluk idup..:p. Akhir-akhir ini ane benar-benar stacknan buat ngoding, karna logika benar ndak jalan, jadilah otak susah bekerja buat ngembangin koding, apalagi project ndak jadi-jadi..haaaa, rasanya tu cammm mana gituuu...:p (alay dah)

Nah barusan ane iseng-iseng bikin aplikasi sederhana dengan Database SQLite bawaan Android, apilikasi nya simpel sih, 10Tips Untuk Pendaki Pemula...kenapa ane bikin app ini? kepikiran tadi habis baca-baca sebuah web yang berisi tips-tips pendakian kegunung (jadi kangen ke gunung euy, pengen lihat rembulan..:p ), so, ya lumayanlah buat nambah posting di blog ini, dari pada ini blog mati kelaparan karna tak di isi..:p

Oke lanjut and langsung aje, Berikut tampilan appnya dari emulator di android ;


Berikut file layout XMLnya :
1. main.xml


   
   
   


2. list_tips.xml


   
   
   
    


3. detail.xml


   
   
   
 


Berikut file JAVAnya ;

1. TipsAdapter.java

package com.tipspemula.yonandroid;

import java.util.ArrayList;
import java.util.HashMap;

import com.tipspemula.yonandroid.adapter.TipsAdapter;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;


public class MainActivity extends ListActivity {
 
 public static final String YA_ID    = "id";
 public static final String YA_JUDUL = "judul";
 
 ArrayList> daftar_tips = new ArrayList>();
 
 private SQLiteDatabase  db = null;
 private DataTips dataDB = null;
 private Cursor cursor = null;
 
 private HashMap mapp;
 private ListView list;
 private TipsAdapter adap;
 private String i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
        
        dataDB = new DataTips(this);
        db = dataDB.getWritableDatabase();
        dataDB.createTable(db);
        dataDB.generateData(db);
        
        getTips();
    }

    // TODO Auto-generated method stub
    private void getTips() {
     try {
      cursor = db.rawQuery("SELECT * " + "FROM tips", null);
      if (cursor.getCount() > 0) {
       int indexID    = cursor.getColumnIndex("id");
       int indexJudul = cursor.getColumnIndex("judul");
       
       cursor.moveToFirst();
    do {
     String ID    = cursor.getString(indexID);
     String Judul = cursor.getString(indexJudul);
     
     mapp = new HashMap();
     mapp.put(YA_ID, ID);
     mapp.put(YA_JUDUL, Judul);
     
     daftar_tips.add(mapp);
     
     cursor.moveToNext();
    } while (!cursor.isAfterLast());
      }
     } finally {
   if (cursor != null) {
    cursor.close();
   }
   this.adapter_listview();
  }
    }

    // TODO Auto-generated method stub
 private void adapter_listview() {
  list = getListView();
  adap = new TipsAdapter(this, daftar_tips);
        list.setAdapter(adap);
        
        list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView parent, View view,int position, long id) {
     i = ((TextView) view.findViewById(R.id.id)).getText().toString();
     Intent in = new Intent(MainActivity.this, DetailTips.class);
     in.putExtra("ID", i);
     startActivity(in);
    }
   });  
    }

}


2. MainActivity.java

package com.tipspemula.yonandroid;

import java.util.ArrayList;
import java.util.HashMap;

import com.tipspemula.yonandroid.adapter.TipsAdapter;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;


public class MainActivity extends ListActivity {
 
 public static final String YA_ID    = "id";
 public static final String YA_JUDUL = "judul";
 
 ArrayList> daftar_tips = new ArrayList>();
 
 private SQLiteDatabase  db = null;
 private DataTips dataDB = null;
 private Cursor cursor = null;
 
 private HashMap mapp;
 private ListView list;
 private TipsAdapter adap;
 private String i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
        
        dataDB = new DataTips(this);
        db = dataDB.getWritableDatabase();
        dataDB.createTable(db);
        dataDB.generateData(db);
        
        getTips();
    }

    // TODO Auto-generated method stub
    private void getTips() {
     try {
      cursor = db.rawQuery("SELECT * " + "FROM tips", null);
      if (cursor.getCount() > 0) {
       int indexID    = cursor.getColumnIndex("id");
       int indexJudul = cursor.getColumnIndex("judul");
       
       cursor.moveToFirst();
    do {
     String ID    = cursor.getString(indexID);
     String Judul = cursor.getString(indexJudul);
     
     mapp = new HashMap();
     mapp.put(YA_ID, ID);
     mapp.put(YA_JUDUL, Judul);
     
     daftar_tips.add(mapp);
     
     cursor.moveToNext();
    } while (!cursor.isAfterLast());
      }
     } finally {
   if (cursor != null) {
    cursor.close();
   }
   this.adapter_listview();
  }
    }

    // TODO Auto-generated method stub
 private void adapter_listview() {
  list = getListView();
  adap = new TipsAdapter(this, daftar_tips);
        list.setAdapter(adap);
        
        list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView parent, View view,int position, long id) {
     i = ((TextView) view.findViewById(R.id.id)).getText().toString();
     Intent in = new Intent(MainActivity.this, DetailTips.class);
     in.putExtra("ID", i);
     startActivity(in);
    }
   });  
    }

}


3. Ada dua file Java lagi yaitu; DataTips.java dan Detail.java, silahkan download aja file lengkapnya disini

Berikut Tampilannya :

List Data



Detail Data

Oke, sekian aje,.. and happy coding..

Sunday, February 22, 2015

Belajar Android - Android Option Menu

Aih, Seharian ngoprek kodeng android, mainin mysql, php and JSON, akhirnya tak tersasa waktu berlalu dari pagi ke pagi. sebelum ane tidur, ane ngepost catatan cara membuat option menu di android aja dari pada kagak diisi nih blog, kasiaannn...:p

Ok, dalam aplikasi android, terdapat 3 menu yang dapat kita gunakan, yaitu : Option Menu, Context Menu dan Submenu. Menu ini sangat penting digunakan untuk navigasi beberapa activity yang ingin kita tampilkan, karna layar diandroid sangat mini jadilah ini sangat penting bok.. 

Untuk Posting kali ini ane mengepost mengenai Options Menu aje, Context Menu dan Submenu akan ane buat catatannya laen kali di posting selanjutnya, belajarnya pelan aje, biar pelan asal SemangArt, apelagi ada rembulan, cihuuyy..(ndak jadi ngantuk deh..:p )

Menurut penerawangan ki kusumo..:), jumlah item yang akan ditampilkan di options menu, terdapat 2 macam tipe menu yaitu:
 - Icon Menu, jika jumlah item 1-6 maka akan tampil sebagai icon menu
 - Expanded Menu, jika jumlah item lebih dari 6 maka menu 6-dst akan tampil di expanded menu. Pilihan Expanded menu akan ditampilkan pada icon menu “more” di paling akhir. 

Ok, lanjut aja, disini ane menggunakan sebuah layout  dari XML dengan nama activity_menu.xml untuk menampilkan Option Menu, di mana file ini disimpan di  res/menu/namafilenya, berikut code XML nya :


    
    
 
    
 
      
        
    
 
    
 
      



Dan berikut code untuk menampilkan Option Menu yang di letakkan di MainActivity :
        @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.menu_activity, menu);
  return true;
 }

Dan, Code untuk mengEksekusi menu dari XML diatas sebagai berikut :
public boolean onOptionsItemSelected(MenuItem item){
  switch (item.getItemId()) {
  case R.id.id_home:
   // code for Login
   return true;
  case R.id.id_setting:
   // code for Setting
   return true;    
  case R.id.id_about:
   // code for About
   return true;
  case R.id.id_search:
   // code for Login
   return true;
  case R.id.id_view:
   // code for Setting
   return true;    
  case R.id.id_exit:
   // code for About
   return true;
  default:
   return super.onOptionsItemSelected(item);
  }
 }

Berikut Tampilan hasilnya, gambar pertama tanpa menu, dan gambar kedua setelah diclick tombol menu muncullah menunya.. taratarataraaa...



Tampilan Awal tanpa Option Menu


Tampilan dengan Option Menu seteleah diclick tombol menu

Udah sekian dulu catatan singkatnya, sebagai pengingat aja kalau-kalau nanti ane lupa, dan mana tw ada yang lagi nyari juga bikin option menu di android dan kagak ngerti...hohoho...

Wednesday, February 18, 2015

Belajar Crud Android - SQLite DataBase (Tambah Data, Edit Data, Hapus Data)

Catatan kali ini ane membuat tentang SQLite. Dimana SQLite merupakan tempat penyimpanan data seperti SMS, Contact telpon dan lain sebagainya deh. SQLite ini bawaan resmi dari android, untuk lebih jelas, Apa itu SQLite baca aje ye di situs resminya android disini

Ok bro langsung aje, disini ane membuat pengolahan data siswa dengan SQLite di android (ye iye lah di android, temanya aje Belajar Android...:) ), dimana berikut tampilan akhirnya setelah jadi :

 

Beikut file XML dari activity_main.xml :

    
    
        
        
        
    
    
    

    
     >
     
     
     
    
        
        



Berikut file XML dari list_siswa.xml

    
    
 
       
       
       
       
       
    



Breikut file CLass dari MainActivity

package com.crudlistviewsqlite;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class MainActivity extends ListActivity {
 
 Intent intent;
 TextView siswaId;
 DatabaseControl dbcontrol = new DatabaseControl(this);

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  //ambil data siswa dari Database.getAllsiswa
  ArrayList> siswaList = dbcontrol.getAllsiswa();
  
  //jika data ada tampilkan data siswa di listview
  if (siswaList.size() != 0) {
   ListView lv = getListView();
   lv.setOnItemClickListener(new OnItemClickListener(){
    
    @Override
    public void onItemClick(AdapterView parent,View view, int position, long id){
     siswaId = (TextView) view.findViewById(R.id.tvIdSiswa);
     String valsiswaId = siswaId.getText().toString();
     Intent objintent = new Intent(getApplicationContext(), EditSiswaActivity.class);
     objintent.putExtra("siswaId", valsiswaId);
     startActivity(objintent);
    }
   });
   
   ListAdapter adapter = new SimpleAdapter(MainActivity.this,
     siswaList, R.layout.list_siswa, new String[]{
     "siswaId", "namaSiswa", "jurusan", "alamat"}, new int[] {
      R.id.tvIdSiswa, R.id.tvNamaSiswa, R.id.tvJurusan, R.id.tvAlamat});
   setListAdapter(adapter);
     }
 }
 //tambah Siswa, jika mengklik tombl plus
 public void TambahSiswa(View view){
  Intent objintent = new Intent(getApplicationContext(),
    SiswaBaruActivity.class);
  startActivity(objintent);
 }
}


Berikut file Class dari DatabaseControl

package com.crudlistviewsqlite;

import java.util.ArrayList;
import java.util.HashMap;

import android.util.Log;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseControl extends SQLiteOpenHelper{
 
 private static final String LOGCAT = null;
 
 public DatabaseControl(Context applicationcontext) {
  super(applicationcontext, "siswa.db", null, 1);
  // TODO Auto-generated constructor stub
  Log.d(LOGCAT, "Created");
 }
 
 // TODO Auto-generated method membuat tabel Siswa
 @Override 
 public void onCreate(SQLiteDatabase database) {
  String query;
  query = "CREATE TABLE siswa ( siswaId INTEGER PRIMARY KEY, " + 
          " namasiswa TEXT, jurusan TEXT, alamat TEXT)";
          database.execSQL(query);
          Log.d(LOGCAT,"siswa Created");
  
 }
 // TODO Auto-generated method Upgrade tabel siswa
 @Override
 public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
  String query;
  query = "DROP TABLE IF EXISTS siswa";
  database.execSQL(query);
  onCreate(database);
 }
 
 //kode insert data ke dalam tabel siswa
 public void TambahSiswa(HashMap queryValues){
  SQLiteDatabase database = this.getWritableDatabase();
  ContentValues values = new ContentValues();
  values.put("namaSiswa", queryValues.get("namaSiswa"));
  values.put("jurusan", queryValues.get("jurusan"));
  values.put("alamat", queryValues.get("alamat"));
  database.insert("siswa", null, values);
  database.close();
 }
 
 //Tampilkan data Siswa ke listview, getallSiswa
 
 public ArrayList> getAllsiswa() {
  ArrayList> siswaList;
  siswaList = new ArrayList>();
  String selectQuery = "SELECT * FROM siswa";
   SQLiteDatabase database = this.getWritableDatabase();
   Cursor cursor = database.rawQuery(selectQuery, null);
   if (cursor.moveToFirst()) {
    do {
     HashMap map = new HashMap();
     map.put("siswaId", cursor.getString(0));
     map.put("namaSiswa", cursor.getString(1));
     map.put("jurusan", cursor.getString(2));
     map.put("alamat", cursor.getString(3));
     siswaList.add(map);
    }while (cursor.moveToNext());
   }
   //return contact
   return siswaList;
 }
 
 public int editSiswa(HashMap queryValues){
  SQLiteDatabase database = this.getWritableDatabase();
  ContentValues values = new ContentValues();
  values.put("namaSiswa", queryValues.get("namaSiswa"));
  values.put("jurusan", queryValues.get("jurusan"));
  values.put("alamat", queryValues.get("alamat"));
  return database.update("siswa", values, "siswaId" + " = ?", new String[]{
    queryValues.get("siswaId")});
 }
 
 public void hapusSiswa(String id){
  Log.d(LOGCAT, "delete");
  SQLiteDatabase database = this.getWritableDatabase();
  String deleteQuery = "DELETE FROM siswa where siswaId= '"+ id +"'";
  Log.d("query", deleteQuery);
  database.execSQL(deleteQuery);
 }
 
 public HashMap getInfoSiswa(String id){
  HashMap siswaList = new HashMap();
  SQLiteDatabase database = this.getReadableDatabase();
  String selectQuery = "SELECT * FROM siswa where siswaId='"+id+"'";
  Cursor cursor = database.rawQuery(selectQuery, null);
  if(cursor.moveToFirst()){
   do {
    siswaList.put("namaSiswa", cursor.getString(1));
    siswaList.put("jurusan", cursor.getString(2));
    siswaList.put("alamat", cursor.getString(3));
   }while(cursor.moveToNext());
  }
  return siswaList;
 }
 
}

Masih ada dua file XML lagi, edit_datasiswa.xml dan tambah_data_siswa.xml. Dan dua file Class, SiswaBaruActivity dan EditSiswaActivity. Karna terlalu panjang dan hari sudah pagi, eh mw nonton Chelsea vs PSG dulu, silahkan Download lengkap FIle nya aja, Click disini

Happy Coding broo....:)

Sunday, February 15, 2015

Belajar Android - DataBase SQLite to ListView

Oke, Lansung Aje, karna mata dah ngantuk, dah tak bersahabat. dah kayak ayam manggut manggut..:p

berikut xml dari layout, activity_main.xml



    
    
    




 berikut xml dari layout row_wisata.xml


    
    



berikut DbHelper.java nya

package com.listviewsqlite.yonandroid;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DbHelper extends SQLiteOpenHelper{
 
 private static final String DATABASE_NAME = "dbwisata";
 public static final String NAMA = "nama";
 public static final String KEY_ID = "_id";
 
 public DbHelper(Context context){
  super(context, DATABASE_NAME, null, 1);
 }
 //method createTable untuk Tabel Wisata
 public void createTable(SQLiteDatabase db){
  db.execSQL("DROP TABLE IF EXISTS WISATA");
  db.execSQL("CREATE TABLE if not exists WISATA (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + " nama TEXT);");
  
 }
 
 //method generate data untuk mengisikan data ke table wisata
 public void generateData(SQLiteDatabase db){
  ContentValues cv = new ContentValues();
  cv.put(NAMA, "Pantai Siung");
  db.insert("WISATA", NAMA, cv);
  cv.put(NAMA, "Gunung Merapi");
  db.insert("WISATA", NAMA, cv);
  cv.put(NAMA, "Candi Borobudur");
  db.insert("WISATA", NAMA, cv);
  cv.put(NAMA, "Benteng Vanderbug");
  db.insert("WISATA", NAMA, cv);
  cv.put(NAMA, "Gunung Merbabu");
  db.insert("WISATA", NAMA, cv);
  cv.put(NAMA, "Candi Prambanan");
  db.insert("WISATA", NAMA, cv);
  cv.put(NAMA, "Bukit Bintang");
  db.insert("WISATA", NAMA, cv);
 }
 
 //method delAlldata untuk menghapus data dari table
 public void delAllData(SQLiteDatabase db){
  db.delete("WISATA", null, null);
 }
 
 public Cursor fetchAllWisata(SQLiteDatabase db){
  return db.query("WISATA", new String[] { KEY_ID, NAMA }, null, null, 
    null, null, null);
 }
 @Override
 public void onCreate(SQLiteDatabase db) {
  createTable(db);
  
 }
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // TODO Auto-generated method stub
  
 }
}


dan berikut MainActivity.java nya

package com.listviewsqlite.yonandroid;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class MainActivity extends Activity {
 
 private DbHelper dbhelper;
 private SQLiteDatabase db = null;
 private ListView listContent = null;
 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  dbhelper = new DbHelper(this);
  db = dbhelper.getWritableDatabase();
  dbhelper.delAllData(db);
  dbhelper.generateData(db);
  setContentView(R.layout.activity_main);
  listContent = (ListView) findViewById(R.id.listWisata);
  isDataListView();
 }
 
 @SuppressWarnings("deprecation")
 private void isDataListView() {
  Cursor wisataCursor;
  
  wisataCursor = dbhelper.fetchAllWisata(db);
  
  startManagingCursor(wisataCursor);
  
  String[] from = new String[]{dbhelper.NAMA};
  
  int[] to = new int[]{R.id.tvWisata};
  
  SimpleCursorAdapter wisataAdapter = 
    new SimpleCursorAdapter(this, R.layout.row_wisata,
      wisataCursor, from, to);
  
  listContent.setAdapter(wisataAdapter);
 }
 @Override
 public void onDestroy() {
  super.onDestroy();
  try{
   db.close();
  }catch (Exception e){
   
  }
 }
}


dan terakhir screensoot hasil emulator nya..:)


sekian...:)

@sumber dari mbah google, dan situs developver.android

Saturday, February 14, 2015

Belajar Android - Fitur Pencarian dan Event Click pada ListView ( Detail Menu )

Catatan kali ini masih tentang listview di android, disini kita membuat fitur pencarian dan detail dari menu listview. fitur pencarian sangat berguna jika data yang ditampilkan dalam list begitu banyak, untuk menghemat waktu dalam menemukan data.

Disini kita juga membuat event click pada listvew, dimana jika salah satu data click pada listview maka akan menampilkan detail data, seperti gambar berikut:


Buat project baru, kemudian tambahkan dua buah layout, disini ane kasih nama activity_cari.xml dan detail_bulan.xml  , dan tambahkan satu Class, disini ane kasih nama DetailBulan seperti gambar di bawah :


Berikut isi xml dari activity_main.xml :



    




Berikut isi xml dari activity_cari.xml:


    
    
    
    



Berikut isi xml dari detail_bulan.xml:


 
    
 
    
 


Berikut Coding pada Class MainActivity :

package com.listviewfiturpencarian.yonandroid;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {
 
 private ListView listV;
 ArrayAdapter adapter;
 EditText inputSearch;
 
 //ArrayList for LIstView
 ArrayList> bulanList;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_cari);
  //Data Array List Bulan
  String bulan[] = {"January", "February", "Maret", "April", "Mei",
    "Juni", "Juli", "Agustus", "September", "Oktober", "November",
    "Desember" };
  // ambil list_view dan inputsearchnya di xml 
  listV = (ListView) findViewById(R.id.list);
  inputSearch = (EditText) findViewById(R.id.inputSearch);
  
  //proses menambah Array dalam listview
  adapter = new ArrayAdapter(this, R.layout.activity_main,
    R.id.nama_bulan, bulan);
  listV.setAdapter(adapter);
  
  //Detail list item / Event Click
  listV.setOnItemClickListener(new OnItemClickListener(){
   @Override
   public void onItemClick(AdapterView parent, View view, int position, long id){
    String nama_bulan=listV.getItemAtPosition(position).toString();
    Intent intent = new Intent(getApplicationContext(), DetailBulan.class);
    intent.putExtra("nama_bulan", nama_bulan);
    startActivity(intent);
   }
  });
  
  //Kode berikut untuk memfilter/pencarian
  inputSearch.addTextChangedListener(new TextWatcher(){

   @Override
   public void onTextChanged(CharSequence cs, int arg1, int arg2,
     int arg3) {
    // TODO Auto-generated method stub
    MainActivity.this.adapter.getFilter().filter(cs);
   }
   
   @Override
   public void beforeTextChanged(CharSequence arg0, int arg1,
     int arg2, int arg3) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void afterTextChanged(Editable arg0) {
    // TODO Auto-generated method stub
    
   }
  });
 }
}


Berikut Coding pada Class DetailBulan :

package com.listviewfiturpencarian.yonandroid;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class DetailBulan extends Activity{
 
 String nama_bulan;
 TextView nmBulan, detBulan;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.detail_bulan);
  
  //ambil textView namabulan da
  nmBulan = (TextView) findViewById(R.id.nama_bulan);
  detBulan = (TextView) findViewById(R.id.detail_bulan);
  
  //ambil parameter nama_bulan dari Intent
  Intent intent = getIntent();
  nama_bulan = intent.getStringExtra("nama_bulan");
  
  //tampilkan nama bulan di textview
  nmBulan.setText(nama_bulan);
  
  //panggil setDetail(String bulan) dan tampilkan
  setDetail(nama_bulan);
  
 }
 //berikut Fungsi SetDetail
 public void setDetail(String bulan){
  if(bulan.equalsIgnoreCase("January")){
   detBulan.setText("Bulan Pertama Pada Tahun Berisi 31 hari");
  }else if(bulan.equalsIgnoreCase("February")){
   detBulan.setText("Bulan Kedua Pada Tahun Terdiri dari 28 Hari");
     }else if(bulan.equalsIgnoreCase("Agustus")){
   detBulan.setText("Bulan Kedelapan Pada Tahun");
     }else{
      detBulan.setText("Nama Bulan Tidak Ada Coy");
     }
 }
}


oke sekian, untuk download complate project click here

Thursday, February 12, 2015

Belajar Android - ListView - AlertDialog dengan Toast

Karna mata ane ndak mau merem dan ternyata udah pagi aje, matahari udah nimbrung aje di barat, mulai perlahan menerangi bumi pertiwi.

Lanjut aje, Catatan ini menampilkan tentang alert dialog gitu yang muncul jika diklik pada menu listview. Disini kita menggunakan dialog singkat dengan  fungsi Toast.

Apa itu Toast?
Toast digunakan untuk menampilkan pesan yang setelah muncul kemudian akan menghilang dengan sendirinya  tanpa interaksi dengan pengguna. Fokus juga tetap pada aplikasi dan tidak berpindah ke Toast.  Kelebihan Toast adalah mudah untuk dibuat, sedangkan kelemahannya adalah pengguna dapat saja tidak melihat pesan yang ditampilkan  Toast.

Disini kita akan menerapkan Toast pada contoh listview pada catatan sebelumnya,jadi silahkan buka catatan sebelunya disini
Dan disini kita juga akan menerapkan judul pada baris akan berubah menjadi warna hitam. 
Oke lanjut aja dari pada panjang lebar ngejelasinnya..:) Pada kode listview sebelumnya, tambahkan kode berikut pada Class MainActivity berikut.

//handle
        lv.setClickable(true);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView parent, View viewRow, int posisi, long id){
          //ambil textView dalam row yang diklik dan ganti warna judul
          TextView tvJudul = (TextView) viewRow.findViewById(R.id.tvJudul);
          tvJudul.setTextColor(Color.BLACK);
          
          //ambil data pada posisi diklik dan tampilkan datanya
             ListData data = alData.get(posisi);
             Toast t = Toast.makeText(getBaseContext(), data.judul, Toast.LENGTH_SHORT);
             t.show();
         }
  });

Sehingga kode Lengkapnya di MainActivity  sebagai berikut:

package com.compositelistview.yonandroid;

import java.util.ArrayList;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
 
 ArrayList alData = new ArrayList();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //isi Data
        alData.add(new ListData("Malioboro", "Pusat Belanja Di Jogja ini selalu Ramai, apalagi ketika masa-masa liburan "));
        alData.add(new ListData("Parangtritis", "Pantai yang terkenal dengan alam gaibnya, Nyi Roro Kidul, penguasa pantai selatan"));
        alData.add(new ListData("Keraton", "Keterangan"));
        alData.add(new ListData("Candi Prambanan", "Keterangan"));
       
        //setAdapter
        ListView lv =(ListView) findViewById(R.id.listJudul);
        DataAdapter adapter = new DataAdapter(this, R.layout.file_row, alData);
        lv.setAdapter(adapter);
        
        //handle
        lv.setClickable(true);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView parent, View viewRow, int posisi, long id){
          //ambil textView dalam row yang diklik dan ganti warna judul
          TextView tvJudul = (TextView) viewRow.findViewById(R.id.tvJudul);
          tvJudul.setTextColor(Color.BLACK);
          
          //ambil data pada posisi diklik dan tampilkan datanya
             ListData data = alData.get(posisi);
             Toast t = Toast.makeText(getBaseContext(), data.judul, Toast.LENGTH_SHORT);
             t.show();
         }
  });
        
    }
}

Sekarang Jalankan Program dan hasilnya terlihat seperti di Emulator gambar di bawah ini:
Pada Gambar Emulatator diatas terlihat jika diklik Pada Malioboro akan menampilkan dialog Malioboro yang ditunjuk oleh panah merah dibaawah. Dan warna Pada listview Judul Malioboro Berubah jadi warna Hitam.
Ok, Good Morning, Happy Fun coding.. Download Coding Here

Belajar Android - Composite ListView

Happy rain tonight, guys...:) catatan kali masih tentang listview di android. Tentang Composite Listview, dimana disini listview menampilkan struktur yang lebih rumit. Berikut memperlihatkan listview dengan isi yang  kita tentukan sendiri.


ok mari kita mulai saja, pertama buat project baru, pada layout_main.xml tambahkan ListView kemudian ganti id menjadi listJudul seperti dibawah :

< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.compositelistview.yonandroid.MainActivity" >

    < ListView
        android:id="@+id/listJudul"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    < /ListView>
    
< /LinearLayout>


Buat Layout baru beri nama row.xml, tambahkan LargeText dan TextView, lalu ganti id-nya seperti dibawah :

< ?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:orientation="vertical" >

    < TextView
        android:id="@+id/tvJudul"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textColor="#EB9500"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    < TextView
        android:id="@+id/tvKeterangan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" 
        android:textColor="#3286FC"/ >

< /LinearLayout>



Lanjut sebuah buat Class dengan nama ListData.java lalu tambahkan kode berikut :

package com.compositelistview.yonandroid;

public class ListData {
 public String judul;
 public String keterangan;
 
 //Constructor
 public ListData(String judul, String keterangan){
  this.judul = judul;
  this.keterangan = keterangan;
 }

}

Lanjut buat satu Class lagi kasih nama DataAdapter.java, lalu tambahkan kode berikut :

package com.compositelistview.yonandroid;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class DataAdapter extends ArrayAdapter {
 private ArrayList alData;

 public DataAdapter(Context context, int textViewResourceId, ArrayListalData) {
  super(context, textViewResourceId, alData);
  this.alData = alData;
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  View v = convertView;
  //Isi layout baris dengan yang ada di row.xml
  if (v == null){
   LayoutInflater li = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   v = li.inflate(R.layout.file_row, null);
  }
  //gambar baris sesuai index pos
  ListData dl = alData.get(position); //ambil data sesuai indek pos
  if (dl != null){
   TextView tvJudul = (TextView) v.findViewById(R.id.tvJudul);
   TextView tvKeterangan = (TextView) v.findViewById(R.id.tvKeterangan);
   tvJudul.setText(dl.judul);
   tvKeterangan.setText(dl.keterangan);
  }
  return v;
 }
}
Lanjut pada MainActivity.java Tambahkan Kode berikut :

package com.compositelistview.yonandroid;

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

public class MainActivity extends Activity {
 
 ArrayList alData = new ArrayList();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //isi Data
        alData.add(new ListData("Malioboro", "Pusat Belanja Di Jogja ini selalu Ramai, apalagi ketika masa-masa liburan "));
        alData.add(new ListData("Parangtritis", "Pantai yang terkenal dengan alam gaibnya, Nyi Roro Kidul, penguasa pantai selatan"));
        alData.add(new ListData("Keraton", "Keterangan"));
        alData.add(new ListData("Candi Prambanan", "Keterangan"));
       
        //setAdapter
        ListView lv =(ListView) findViewById(R.id.listJudul);
        DataAdapter adapter = new DataAdapter(this, R.layout.file_row, alData);
        lv.setAdapter(adapter);
        
    }
}
oke, Selanjutnya silahkan di Run programnya: Good night, Happy rain tonight...

  @sumber dari mbah google.

Wednesday, February 11, 2015

Belajar Android - ListView Dasar

Ok guys, masih tetap belajar tentang android. Karna masih penasaran dengan opensource ini. Kali ini kita akan belajar tentang ListView.

Apa itu ListView?, ListView adalah widget untuk menampilkan data dalam bentuk list yang dapat di-scroll. Karena ukuran layar smartphone terbatas, listview merupakan salah satu widget terpenting dan paling sering digunakan untuk menampilkan kelompok data berupa informasi.


Listview sendiri sangat bervariasi, namun dilihat dari tingkat kerumitannya listview cuma ada dua yaitu simple list view dan custom listview. Di lihat dari sumber datanya listview bisa dibagi menjadi static listview dan listview dari data yang bersumber dari content provider. Content provider adalah segala jenis mode penyimpanan data seperti file text, Database SQLite, Contact list ataupun data yang diambil dari Webservice.. Lihat dibawah contoh dari listview :

                                    


Oke guys, mari kita mulai permainannya eh membuat list sederhana menampilkan bulan, 
Pertama, buat project baru lalu tambahkan ListView di activity_main.xml. Ganti id list view dengan “listBulan” seperti tampak pada gambar di bawah:




Selanjutnya, di Class MainActivity, tambahkan code sebagai berikut:

package com.belajarlistview.yonandroid;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {
 
 private String[] bulan = {"Januari", "February", "Maret", "April", "Mei", "Juni",
   "Juli", "Agustus", "September", "Oktober", "November", "Desember"};
 ArrayAdapter adapter;
 ListView listBulan;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  listBulan = (ListView) findViewById(R.id.listBulan);
  listBulan.setBackgroundColor(Color.GREEN); //Set background list color
  
  //Buat Adapter

        adapter = new ArrayAdapter(getApplication(), android.R.layout.simple_expandable_list_item_1);
  listBulan.setAdapter(adapter);
 }

}

Selanjutnya Jalankan/Run Program dan hasilnya di emulator seperti terlihat pada gambar dibawah ini :
Sekian Catatan Singkatnya, selanjutnya masih tetap dengan listview,

Monday, February 9, 2015

Belajar Android - Komunikasi Fragment ke Activity (Terakhir)

Berhubung mata ane ndak mau merem, dari tadi tiduran mata terpejam tapi hati tak mau merem, dan Otak pun melayang tak karuan menjelajah cerita tentang bayang - bayang rembulan yang mulai tenggelam ditelan malam. Ok, dilanjut pada catatan aja, kata-kata galaunya cukup segitu aja..:p

Pada Catatan Sebelumnya, ane telah menjelaskan bagaimana komunikasi Activity ke Fragment, dan catatan kali ini ane melanjutkan tentang kebalikan nya, bagaiman Komunikasi Fragment ke Aktivity.

Catatn sebelumnya :

1. Belajar Android - Fragment
2. Belajar Android - Komunikasi Activity ke Fragment


Komunikasi Fragment ke Activity

Buka kembali contoh app yang telah kita buat, karna kita akan  membuat / memfungsikan button FragmentB mengirim data ke main activity. Untuk mendapatkan instance activity dapat digunakan getActivity().

Pertama, buka layout activity_main.xml, tambahkan satu label/TextView dan beri nama id: tvPesanFragment, dan text Kiriman FragmentB, seperti contoh gambar di bawah:


Lanjut, buka Class MainActivity, tambahkan method peenulisan pesan di bawah ini :

public void pesan(String s){
TextView tvPesan = (TextView)findViewById(R.id.tvPesanFragmentB);
tvPesan.setText(s);

}

Kemudian lanjut lagi, buka layout fragment_b.xml, tambahkan sebuah button, beri nama id bPesanKeActivity, seperti gambar dibawah :



Lanjut lagi, buka Class FragmentB, tambahkan kode berikut dibawah, atribut yang di pake adalah listener. Buat FragmentB mengimplements OnClickListener dan Untuk mendapatkan activity, kita gunakan getActivity.

package com.belajarfragmentdinamis.yonandroid;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;

public class FragmentB extends Fragment implements OnClickListener {

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

         View v = inflater.inflate(R.layout.fragment_b, container, false);
         Button b = (Button) v.findViewById(R.id.bPesanKeActivity);
         b.setOnClickListener(this);
         return v; 
    }

@Override
public void onClick(View arg0) {
MainActivity ma = (MainActivity) getActivity();
ma.pesan("Hallo ini pesan dari Fragment B");

}

}

Kemudian lanjut, Jalankan/Run program, Click tombol FragmentB, kemudian click tombol Kirim ke Activity


 Udah, sekian dulu catatan singkatnya, karna ane juga lagi belajar. Dan jadi pembelajaran yang baik menurut ane adalah di baca dari berbagai refensi(dari google) lalu di praktekin sambil di bikin tulisan juga. semoga bermanfaat, mau lanjut galau lagi..:p

@ referensi dari berbagai sumber dari mbah google.

Sunday, February 8, 2015

Belajar Android - Komunikasi Activity ke Fragment ( Dinamik )

Pada catatan sebelumnya, ane, menjelaskan menambahkan dua fragment dalam satu activity melalui layout.xml. Kelemahan dalam penerapan tersebut adalah fragment tidak dapat di add, delete dan replace secara dinamik.

Dan, catatan kali ini kita akan mencoba untuk memberikan contoh dalam menambah dan merubah fragment secara dinamik.

Pertama, Buat project baru seperti contoh sebelumnya, yang terdiri dari dua class fragment (FragmentA dan FragmentB) dan dua layout(fragment_a.xml dan fragment_.xml). Ato lebih mudah copy aja class dan layout yang sebelum kita buat dan taruh pada project baru kita.

Selanjutnya modifikasi activity_main.xml seperti gambar berikut (rincian XML ada dibawah gambar).  Ada dua button dan satu framelayout. Saat button “FragmentA” ditekan maka frameLayout akan diisi oleh fragment pertama dan demikian juga dengan button “FragmentB”.


berikut XML pada activiti_main.xml - nya :

< RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context="com.belajarfragmentdinamis.yonandroid.MainActivity" >;

    < Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        android:onClick="clickFram1"
        android:text="FragmentA" />
    
    < FrameLayout
        android:id="@+id/fragment_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="101dp" >
    < /FrameLayout>

  < Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_margin="2dp"
        android:layout_toRightOf="@+id/button1"
        android:onClick="clickFram2"
        android:text="FragmentB" />

< /RelativeLayout >

Untuk menambah dan menghapus fragment secara dinamik, gunakan FragmentTransaction. Sedangkan untuk menyimpan history frame agar saat user menekan back kembali ke fragment sebelumnya, gunakanlah method addToBackStack. Berikut adalah code lengkap untuk class MainActivity:

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.View;

public class MainActivity extends FragmentActivity{
int fragmentAktif;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState != null){
return;
}
//buat FragmentA
FragmentA fragA = new FragmentA();
//ambil fragment transactiom, isi fragment_content dengan fragmnet awal
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragment_content, fragA).commit();
fragmentAktif = 1;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void clickFram2(View v){
if(fragmentAktif==2){
//karna fragmnet dua sudah aktif jadi tidak perlu melakukan apapa
return;
}
//ganti isi fram_content dengan fram B
FragmentB fragB = new FragmentB();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// ganti isi container dengan fragment 2
// pindahkan fragment sebelumnya ke backstack
transaction.replace(R.id.fragment_content, fragB);
transaction.addToBackStack(null);
transaction.commit();
fragmentAktif = 2;
}
public void clickFram1(View v){
if(fragmentAktif==1){
return;
}
FragmentA fragA = new FragmentA();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_content, fragA);
transaction.addToBackStack(null);
transaction.commit();
fragmentAktif = 1;
}
}

Perlu diingat bahwa dengan menambahkan ke addToBackStack, fragment akan masuk ke state stop. Tanpa addToBackStack, fragment akan di-destroy.

 Komunikasi Activty ke Fragment

Satu activity dapat mengandung beberapa fragment, masalahnya bagaimana Activity dapat berkomunikasi dengan fragment tersebut? atau bagaimana fragment bisa berkomunikasi satu sama lain?

Untuk komunikasi dari activity ke fragment, dapat digunakan method findFragmentById() untuk mendapatkan instance fragment. Setelah itu kita dapat mengakses public method milik fragment tersebut. Sedangkan untuk mendapatkan instance dari Activity dapat digunakan getActivity().

Kita akan modifikasi code pada contoh sebelumnya. Pada layout fragment_a, tambahkan satu textview di bagian atas, beri nama id tvPesan dan text " Pesan Dari Activity (sepertigambar dibawah)


Update FragmentA.java, tambahkan public method untuk menulis pesan di text view di fragment ini, perhatikan penggunaan getView() untuk mendapatkan view fragment:

public void setPesan(String pesan){
TextView tvPesan = (TextView)getView().findViewById(R.id.tvPesan);
tvPesan.setText(pesan);
}

Kemudian pada layout  activiy_main.xml, tambahkan satu button dengan nama Kirim seperti contoh dibawah :


Selanjutnya update MainActivity.java, tambahkan event button kirim pesan (perhatikan penggunaan findFragmentById):  

public void clickKirimPesan(View v){
if(fragmentAktif==1){
//ambil fragment yang dicontent
FragmentA fa = (FragmentA)getSupportFragmentManager().findFragmentById(R.id.fragment_content);
//panggil method di fragment tersebut
fa.setPesan("Hai ini Pesan dari FActivity");
}
}

Silahkan diRun dan Click tombol “Kirim” maka akan muncul pesan dari MainActivity.


Oke, Sekian dulu catatan nya..moga-moga yang baca dapat manfaat,

Berikutnya catatannya ane lanjutkan Komunaksi Fragment ke Activity menggunkan tombol FragmentB