Created
April 18, 2017 07:18
-
-
Save charlesvdv/085c454e20ce7ddae600ec8ed4286f6b to your computer and use it in GitHub Desktop.
example of recyclerview with click detail
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package be.charlesvdv.weatherreport; | |
import android.content.Context; | |
import android.support.v7.widget.RecyclerView; | |
import android.util.Log; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.TextView; | |
import java.util.ArrayList; | |
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemAdapterViewHolder> { | |
private static String TAG = ItemAdapter.class.getSimpleName(); | |
private ArrayList<WeatherData> weatherData; | |
private ItemAdapterOnClickHandler clickHandler; | |
public ItemAdapter(ItemAdapterOnClickHandler clickHandler) { | |
this.clickHandler = clickHandler; | |
this.weatherData = new ArrayList<>(); | |
} | |
public interface ItemAdapterOnClickHandler { | |
void onClick(WeatherData weatherData); | |
} | |
public void setChangedData(ArrayList<WeatherData> data) { | |
Log.d(TAG, "Data changed!"); | |
this.weatherData = data; | |
notifyDataSetChanged(); | |
} | |
public class ItemAdapterViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { | |
public final TextView timeTextView; | |
public ItemAdapterViewHolder(View view) { | |
super(view); | |
timeTextView = (TextView) view.findViewById(R.id.weather_item_time); | |
timeTextView.setOnClickListener(this); | |
} | |
@Override | |
public void onClick(View v) { | |
int adapterPos = getAdapterPosition(); | |
clickHandler.onClick(weatherData.get(adapterPos)); | |
} | |
} | |
@Override | |
public ItemAdapterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | |
Context context = parent.getContext(); | |
LayoutInflater inflater = LayoutInflater.from(context); | |
View view = inflater.inflate(R.layout.weather_item, parent, false); | |
Log.d(TAG, "ItemAdapterViewHolder initializing"); | |
return new ItemAdapterViewHolder(view); | |
} | |
@Override | |
public void onBindViewHolder(ItemAdapterViewHolder holder, int pos) { | |
holder.timeTextView.setText(weatherData.get(pos).getTime() + ""); | |
} | |
@Override | |
public int getItemCount() { | |
if (weatherData.isEmpty()) return 0; | |
return weatherData.size(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package be.charlesvdv.weatherreport; | |
import android.content.Intent; | |
import android.support.v7.app.AppCompatActivity; | |
import android.os.Bundle; | |
import android.widget.TextView; | |
import org.w3c.dom.Text; | |
public class WeatherActivity extends AppCompatActivity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_weather); | |
Intent intent = getIntent(); | |
WeatherData weatherData = (WeatherData) intent.getSerializableExtra("weather-data"); | |
TextView tempDayTextView = (TextView) this.findViewById(R.id.weather_item_tempday); | |
TextView humidityTextView = (TextView) this.findViewById(R.id.weather_item_humidity); | |
TextView pressureTextView = (TextView) this.findViewById(R.id.weather_item_pressure); | |
tempDayTextView.setText(weatherData.getDayTemp() + ""); | |
humidityTextView.setText(weatherData.getHumidity() + ""); | |
pressureTextView.setText(weatherData.getPressure() + ""); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package be.charlesvdv.weatherreport; | |
import android.app.LoaderManager; | |
import android.content.AsyncTaskLoader; | |
import android.content.Intent; | |
import android.content.Loader; | |
import android.os.Bundle; | |
import android.support.v7.app.AppCompatActivity; | |
import android.support.v7.widget.LinearLayoutManager; | |
import android.support.v7.widget.RecyclerView; | |
import android.util.Log; | |
import org.json.JSONException; | |
import java.util.ArrayList; | |
public class WeatherListActivity extends AppCompatActivity | |
implements ItemAdapter.ItemAdapterOnClickHandler, LoaderManager.LoaderCallbacks<ArrayList<WeatherData>> { | |
private static String TAG = WeatherHandler.class.getSimpleName(); | |
private static final int LOADER_MANAGER_ID = 22; | |
private RecyclerView recyclerView; | |
private ItemAdapter itemAdapter; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
Log.d(TAG, "test"); | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_weather_list); | |
recyclerView = (RecyclerView) findViewById(R.id.weather_items); | |
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, | |
false); | |
recyclerView.setLayoutManager(layoutManager); | |
recyclerView.setHasFixedSize(true); | |
itemAdapter = new ItemAdapter(this); | |
recyclerView.setAdapter(itemAdapter); | |
Bundle b = new Bundle(); | |
b.putString("URL", "https://andfun-weather.udacity.com/weather"); | |
getLoaderManager().initLoader(LOADER_MANAGER_ID, b, this).forceLoad(); | |
Log.d(TAG, "Starting the WeatherHandler"); | |
} | |
@Override | |
public void onClick(WeatherData data) { | |
Intent intent = new Intent(this, WeatherActivity.class); | |
intent.putExtra("weather-data", data); | |
startActivity(intent); | |
} | |
@Override | |
public Loader<ArrayList<WeatherData>> onCreateLoader(int id, final Bundle args) { | |
return new AsyncTaskLoader<ArrayList<WeatherData>>(this) { | |
ArrayList<WeatherData> data; | |
@Override | |
protected void onStartLoading() { | |
if (data != null) { | |
deliverResult(data); | |
} else { | |
forceLoad(); | |
} | |
} | |
@Override | |
public ArrayList<WeatherData> loadInBackground() { | |
String url = args.getString("URL"); | |
try { | |
String result = NetworkHandler.getJSONFromUrl(url); | |
Log.d(TAG, "Data downloaded"); | |
return WeatherHandler.parseWeatherData(result); | |
} catch (NetworkWeatherException e) { | |
e.printStackTrace(); | |
} catch (JSONException e) { | |
e.printStackTrace(); | |
} | |
Log.d(TAG, "Fail to download"); | |
return null; | |
} | |
@Override | |
public void deliverResult(ArrayList<WeatherData> data) { | |
this.data = data; | |
super.deliverResult(data); | |
} | |
}; | |
} | |
@Override | |
public void onLoadFinished(Loader<ArrayList<WeatherData>> loader, ArrayList<WeatherData> data) { | |
if (data.size() == 0 || data == null) { | |
Log.e(TAG, "Unable to fetch the data"); | |
} | |
Log.d(TAG, "Setting changed data"); | |
itemAdapter.setChangedData(data); | |
} | |
@Override | |
public void onLoaderReset(Loader<ArrayList<WeatherData>> loader) { | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment