You are on page 1of 6

pemograman tersertuktur 1 (natif)

Letak folder file.

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dwi_ap.d1a160038.fas_4_r_b">
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

CustomFilter.java
package com.dwi_ap.d1a160038.fas_4_r_b;

import android.widget.Filter;
import java.util.ArrayList;

public class CustomFilter extends Filter {


ArrayList<Movie> filterList;
MyAdapter adapter;
public CustomFilter(ArrayList<Movie> filterList, MyAdapter adapter)
{ this.filterList = filterList;
this.adapter = adapter;
}
//FILTERING
@Override
protected FilterResults performFiltering(CharSequence constraint) {
//RESULTS
FilterResults results=new FilterResults();
//VALIDATION
if(constraint != null && constraint.length()>0)
{
//CHANGE TO UPPER FOR CONSISTENCY
constraint=constraint.toString().toUpperCase();
ArrayList<Movie> filteredMovies=new ArrayList<>();
//LOOP THRU FILTER LIST
for(int i=0;i<filterList.size();i++)
{
//FILTER
if(filterList.get(i).getDesc().toUpperCase().contains(constraint))
{
filteredMovies.add(filterList.get(i));
}
}
results.count=filteredMovies.size();
results.values=filteredMovies;
}else
{
results.count=filterList.size();
results.values=filterList;
}
return results;
}
//PUBLISH RESULTS
@Override
protected void publishResults(CharSequence constraint, FilterResults results)
{ adapter.movies= (ArrayList<Movie>) results.values;
adapter.notifyDataSetChanged();

}
}

ItemClickListener.java
package com.dwi_ap.d1a160038.fas_4_r_b;

import android.view.View;
public interface ItemClickListener {
void onItemClick(View v);
}

MainActivity.java
package com.dwi_ap.d1a160038.fas_4_r_b;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar; import
android.view.View; import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

SearchView sv;
ListView lv;
MyAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}});
sv= (SearchView) findViewById(R.id.mSearch);
lv= (ListView) findViewById(R.id.lv);
adapter=new MyAdapter(this,getMovies());
lv.setAdapter(adapter);
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{ @Override
public boolean onQueryTextSubmit(String query) {
return false;}

@Override
public boolean onQueryTextChange(String query) {
adapter.getFilter().filter(query);
return false;
} });
}
private ArrayList<Movie> getMovies() {
//COLECTION OF CRIME MOVIES
ArrayList<Movie> movies=new ArrayList<>();
Movie movie=new Movie("Betadin Cair ","atau luka terbakar.",R.drawable.betadin);
movies.add(movie);
movie=new Movie("paramex","paramex, analgetik ",R.drawable.paramex);
movies.add(movie);
movie=new Movie("Bodrex Flu & Batu","sendi dan kondisi lainnya.",R.drawable.bodrex);
movies.add(movie);
movie=new Movie("Meloxicam","Meloxicam inflammatory drug (NSAID).",R.drawable.me);
movies.add(movie);
return movies;
}
}

Movie.java
package com.dwi_ap.d1a160038.fas_4_r_b;

public class Movie {


private String name;
private String desc;
private int image;
public Movie(String name, String desc, int image) {
this.name = name;
this.desc = desc;
this.image = image;
}
public String getName() { return name; }
public String getDesc() {return desc; }
public int getImage() { return image; }
}

MyAdapter.java
package com.dwi_ap.d1a160038.fas_4_r_b;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.Toast;
import java.util.ArrayList;

public class MyAdapter extends BaseAdapter implements Filterable


{ Context c;
ArrayList<Movie> movies;
LayoutInflater inflater;
ArrayList<Movie> filterList;
CustomFilter filter;
public MyAdapter(Context c, ArrayList<Movie> movies) {
this.c = c;
this.movies = movies;
this.filterList=movies; }

//TOTLA NUM OF MOVIES


@Override
public int getCount() {
return movies.size(); }

//GET A SINGLE MOVIE


@Override
public Object getItem(int position) {
return movies.get(position); }

//IDENTITDIER
@Override
public long getItemId(int position) {
return position; }

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(inflater==null) {
inflater= (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

//PERFORM INFLATION
if(convertView==null)
{convertView=inflater.inflate(R.layout.model,null); }

//BIND DATA TO VIEWS


MyViewHolder holder=new MyViewHolder(convertView);
holder.nameTxt.setText(movies.get(position).getName());
holder.descTxt.setText(movies.get(position).getDesc());
holder.img.setImageResource(movies.get(position).getImage());
holder.setItemClickListener(new ItemClickListener()
{ @Override
public void onItemClick(View v) {
Toast.makeText(c,movies.get(position).getName(),Toast.LENGTH_SHORT).show(); }
});
holder.setItemClickListener(new ItemClickListener()
{ @Override
public void onItemClick(View v) {
Toast.makeText(c,movies.get(position).getDesc(),Toast.LENGTH_SHORT).show();
}
});

//RETURN A ROW
return convertView;
}

@Override
public Filter getFilter() {

if(filter==null) {filter=new CustomFilter(filterList,this);}


return filter;}}

MyViewHolder.java
package com.dwi_ap.d1a160038.fas_4_r_b;

import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class MyViewHolder implements View.OnClickListener {

ImageView img;
TextView nameTxt;
TextView descTxt;
ItemClickListener itemClickListener;

public MyViewHolder(View v) {
img= (ImageView) v.findViewById(R.id.movieImage);
descTxt= (TextView) v.findViewById(R.id.descTxt);
nameTxt= (TextView) v.findViewById(R.id.nameTxt);

v.setOnClickListener(this); }

@Override
public void onClick(View v) {this.itemClickListener.onItemClick(v);}
public void setItemClickListener(ItemClickListener ic)
{this.itemClickListener=ic; }}

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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"
android:fitsSystemWindows="true"
tools:context="com.dwi_ap.d1a160038.fas_4_r_b">

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>

content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.dwi_ap.d1a160038.fas_4_r_b.MainActivity"
tools:showIn="@layout/activity_main">

<android.support.v7.widget.SearchView
android:id="@+id/mSearch"
android:layout_width="match_parent"
android:layout_height="50dp"
app:defaultQueryHint="Search.."
/>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lv"
android:layout_below="@+id/mSearch"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>

model.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_margin="10dp"
card_view:cardCornerRadius="10dp"
card_view:cardElevation="10dp"
android:layout_height="wrap_content">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/movieImage"
android:layout_width="98dp"
android:layout_height="106dp"
android:layout_alignParentStart="true"
android:layout_below="@+id/nameTxt"
android:padding="10dp" />

<TextView
android:id="@+id/nameTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:padding="10dp"
android:text="Name"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/colorAccent"
android:textSize="16sp" />

<TextView
android:id="@+id/descTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/movieImage"
android:layout_toEndOf="@+id/movieImage"
android:padding="10dp"
android:text="Deskripsi"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="10sp" />

</RelativeLayout>
</android.support.v7.widget.CardView>

Menu_main.xml
<menu 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"
tools:context="com.dwi_ap.d1a160038.fas_4_r_b.MainActivity">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
</menu>
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#0a55ec</color>
</resources>

dimens.xml
<resources>
<!-- Default screen margins, per the Android Design guidelines.
--> <dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="fab_margin">16dp</dimen>
</resources>

dimens.xml
<resources>
<!-- Example customization of dimensions originally defined in
res/values/dimens.xml (such as screen margins) for screens with more than 820dp of
available width. This would include 7" and 10" devices in landscape (~960dp and
~1280dp respectively). -->
<dimen name="activity_horizontal_margin">64dp</dimen>
</resources>

String.xml
<resources>
<string name="app_name">Search Obat 1</string>
<string name="action_settings">Love Fasilkom</string>
</resources>

styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay"
parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="AppTheme.PopupOverlay"
parent="ThemeOverlay.AppCompat.Light" />
</resources>

styles.xml
<resources>>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item
name="android:statusBarColor">@android:color/transparent</item> </style>
</resources>

You might also like