Ok, so I'm creating an application that will use current gps location (lat/long). The user will have to select a specified radius (.5-100 miles) from a SPINNER. Then, when clicked, there will be a button (onClick listener) that will populate the locations from a SQLite database, in that set radius, to a LISTVIEW. From there, select an item from the listview that will call an activity (Intent).
I have the listview populating data from the database, but I'm having issues with it populating from an onClick event (button). Furthermore, if anyone can figure out how to get the current location to compare the locations listed in the database based on the set radius (from the spinner), and show the ones that match in the listview, I would REALLY appreciate that.
SN: I have it displaying the current location. Here's my code.
Java file
import android.content.Context;
import android.content.Intent;
import android.location.Address;
import android.location.Geocoder;
import android.net.Uri;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class MetersActivity extends ActionBarActivity {
private Toolbar toolbar;
private DrawerLayout drawerLayout;
private static Button search;
private TextView myAddress;
GPSTracker gps;
//new instance of db from meter info database
MeterInfoDatabase myDb;
private Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);
final MeterInfoDatabase db = new MeterInfoDatabase(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_meters);
//myDb = new MeterInfoDatabase(this);
final ListView listView = (ListView) findViewById(R.id.MeterList);
Log.d("LOG", "Before testing the database");
/*
Testing Database Part
*/
List<MeterInfoSQL> allMeters = db.getAllMeters();
ArrayList<String> ar = new ArrayList<String>();
for(MeterInfoSQL m : allMeters)
{
//Toast.makeText(getApplicationContext(), m.getMeterNumber() + " Saved", Toast.LENGTH_LONG).show();
String str = "Meter #: " + m.getMeterNumber();
ar.add(str);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ar);
listView.setAdapter(adapter);
toolbar= (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
myAddress = (TextView) findViewById(R.id.myaddress);
//search button click
onClickButtonListener();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_meters, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
//Used to get location via GPS when search button is tapped
public void onClickButtonListener() {
final Context context = this;
search = (Button) findViewById(R.id.MeterSearch_button);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
gps = new GPSTracker(MetersActivity.this);
//gps coordinates
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
if (gps.canGetLocation()) {
//Shows address
try {
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
if(addresses != null) {
Address returnedAddress = addresses.get(0);
StringBuilder strReturnedAddress = new StringBuilder("Your Current Address:\n");
for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
}
myAddress.setText(strReturnedAddress.toString());
} else{
myAddress.setText("No Address returned!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
myAddress.setText("Canont get Address!");
}
}
else {
gps.showSettingsAlert();
}
//want the lisview to populate when this button is clicked
/*when i move it here I get an error at "this"
ArrayAdapter<String> adapter = new ArrayAdapter<String>
//---> here (this, android.R.layout.simple_list_item_1, ar);
listView.setAdapter(adapter); */
}
});
}
}
The XML Layout
<android.support.v4.widget.DrawerLayout xmlns:android="http://ift.tt/nIICcg"
xmlns:tools="http://ift.tt/LrGmb4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context="com.example.ataccofficial.MetersActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff8a8a90"
android:clickable="true"
tools:context="com.example.themetest.MetersActivity">
<include
android:id="@+id/app_bar"
layout="@layout/app_bar" />
<TextView
android:id="@+id/meterSelectRadiusText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/app_bar"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:inputType="none"
android:text="Select Radius:"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffffffff"
android:textSize="25dp" />
<Spinner
android:id="@+id/meter_spinner"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/textView"
android:layout_below="@+id/meterSelectRadiusText"
android:layout_marginRight="10dp"
android:entries="@array/meter_array"
android:gravity="center"
android:spinnerMode="dialog"
android:textColor="#ffffffff" />
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/meter_spinner"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="27dp"
android:background="#ff8a8a90"
android:text="Location:"
android:textColor="#ffffffff"
android:textSize="15sp" />
<TextView
android:id="@+id/myaddress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:autoText="false"
android:editable="false"
android:enabled="false"
android:focusable="true"
android:textColor="@color/primaryColor"
android:textSize="15sp" />
<Button
android:id="@+id/MeterSearch_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="Search"
android:text="Search"
android:textSize="25dp"
android:typeface="normal"
android:textStyle="bold"
android:layout_below="@+id/myaddress"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Customer"
android:id="@+id/lablecrm"
android:layout_alignBottom="@+id/dailyReportDivider"
android:layout_alignParentStart="true"
android:textColor="#ffffffff" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Issue"
android:id="@+id/lableIssue"
android:layout_alignBottom="@+id/dailyReportDivider"
android:layout_centerHorizontal="true"
android:textColor="#ffffffff" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Distance"
android:id="@+id/lableDistance"
android:layout_alignBottom="@+id/dailyReportDivider"
android:layout_alignParentEnd="true"
android:textColor="#ffffffff" />
<View
android:id="@+id/dailyReportDivider"
android:layout_width="fill_parent"
android:layout_height="2dp"
android:background="@android:color/darker_gray"
android:layout_below="@+id/myaddress"
android:layout_alignParentStart="true"
android:layout_marginTop="84dp" />
<ListView
android:id="@+id/MeterList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/dailyReportDivider"
android:layout_centerHorizontal="true"
android:choiceMode="singleChoice"
android:textColor="#ffffffff"/>
</RelativeLayout>
<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="com.example.ataccofficial.NavigationDrawerFragment"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer" />
String for Spinner
<string-array name="meter_array">
<item>.5 Miles</item>
<item>1 Miles</item>
<item>5 Miles</item>
<item>10 Miles</item>
<item>15 Miles</item>
<item>20 Miles</item>
<item>25 Miles</item>
<item>50 Miles</item>
<item>100 Miles</item>
</string-array>
Aucun commentaire:
Enregistrer un commentaire