Witajcie :)
Mam następujący problem. Chciałbym dodać zdjęcia do mojego RecyclerView (flagi) i niestety nie udaje mi się to . Poniżej wstawiam kod modelu, adaptera i activity. Z góry dziękuję za pomoc.
ADAPTER
package com.example.barto.jsonprototyp.Adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.barto.jsonprototyp.Model.ModelJsona;
import com.example.barto.jsonprototyp.R;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.MyViewHolder> implements Filterable {
private Context context;
private List<ModelJsona> dataList;
private List<ModelJsona> filtr;
private OnitemClickListener mListener;
public interface OnitemClickListener {
void onItemClick (int position);
}
public void setOnitemClickListener (OnitemClickListener listener)
{
mListener=listener;
}
public DataAdapter(Context context, List<ModelJsona> dataList) {
this.context = context;
this.dataList = dataList;
this.filtr= dataList;
}
/// definijca interfejsuy
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_row, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
ModelJsona pozycja = filtr.get(position);
holder.country_flag.setImageResource(pozycja.getLogo());
holder.country_name.setText(pozycja.getName());
holder.country_subregion.setText(pozycja.getSubregion());
holder.country_nativename.setText(pozycja.getNativeName());
holder.country_capital.setText(pozycja.getCapital());
}
@Override
public int getItemCount() {
return filtr.size();
}
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
filtr = dataList;
} else {
ArrayList<ModelJsona> listadoprzeszukiwan = new ArrayList<>();
for (ModelJsona wyszukiwarka : dataList) {
if (
wyszukiwarka.getName().contains(charString) ||
wyszukiwarka.getName().toLowerCase().contains(charString) ||
wyszukiwarka.getSubregion().contains(charString) ||
wyszukiwarka.getSubregion().toLowerCase().contains(charString) ||
wyszukiwarka.getNativeName().contains(charString) ||
wyszukiwarka.getNativeName().toLowerCase().contains(charString) ||
wyszukiwarka.getCapital().contains(charString) ||
wyszukiwarka.getCapital().toLowerCase().contains(charString))
{
listadoprzeszukiwan.add(wyszukiwarka);
}
}
filtr = listadoprzeszukiwan;
}
FilterResults wynikiszukania = new FilterResults();
wynikiszukania.values = filtr;
return wynikiszukania;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults wynikiszukania) {
filtr = (ArrayList<ModelJsona>) wynikiszukania.values;
notifyDataSetChanged();
}
};
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView country_name, country_subregion,country_nativename,country_capital;
public ImageView country_flag;
public MyViewHolder(View itemView) {
super(itemView);
country_flag =(ImageView) itemView.findViewById(R.id.image_view);
country_name = (TextView) itemView.findViewById(R.id.country_name);
country_subregion = (TextView) itemView.findViewById(R.id.country_subregion);
country_nativename = (TextView) itemView.findViewById(R.id.country_nativename);
country_capital= (TextView) itemView.findViewById(R.id.country_capital);
itemView.setOnClickListener((new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mListener !=null){
int position = getAdapterPosition();
String name = filtr.get(position).getName();
for (int i=0 ; i <dataList.size() ; i++ ){
if(name.equals(dataList.get(i).getName())){
position = i;
break;
}
}
if (position != RecyclerView.NO_POSITION) {
mListener.onItemClick(position);
}
}
}
}));
}
}
}
MODEL
private int logo;
public ModelJsona (int logo) {
this.logo= logo;
}
public int getLogo() {
return logo;
}
public void setLogo(int logo) {
this.logo = logo;
}
ACTIVITY
public class MainActivity extends AppCompatActivity implements DataAdapter.OnitemClickListener {
// Deklaracja zmiennych uzywanych potem do przesyłania danych do innej aktywnosci (details)
public static final String EXTRA_COUNTRY_NAME = "country_name";
public static final String EXTRA_COUNTRY_SUBREGION = "country_region";
public static final String EXTRA_COUNTRY_NATIVE_NAME = "country_nativename";
public static final String EXTRA_COUNTRY_CAPITAL = "country_capital";
String answer;
/// JSON DEKLARACJA - dane z restocountries
private RecyclerView recyclerView;
private DataAdapter dataAdapter;
private List<ModelJsona> dataArrayList;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
// Progress Dialog wywołujacy sie podczas pobierania jsona
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Loading Data... Please wait...");
progressDialog.setIndeterminate(false);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setCancelable(false);
progressDialog.show();
// Sprawdzanie połączenia z internetem
ConnectivityManager cm = (ConnectivityManager) getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
answer = "Aplikacja jest połączona z siecią WIFI";
if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
answer = "Aplikacja jest połączona z danymi komórkowymi";
} else
answer = "Brak połączenia z internetem!!!!!!!!";
Toast.makeText(getApplicationContext(), answer, Toast.LENGTH_LONG).show();
}
private void initViews() {
recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
loadJSON();
}
// Metoda odpowiedzialna za pobierania danych z restcountries
private void loadJSON() {
dataArrayList = new ArrayList<>();
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://restcountries.eu/").addConverterFactory(GsonConverterFactory.create()).build();
RequestInterface requestInterface = retrofit.create(RequestInterface.class);
Call<List<ModelJsona>> call = requestInterface.getJSON();
call.enqueue(new Callback<List<ModelJsona>>() {
@Override
public void onResponse(Call<List<ModelJsona>> call, Response<List<ModelJsona>> response) {
dataArrayList = response.body();
recyclerView.setHasFixedSize(true);
dataAdapter = new DataAdapter(getApplicationContext(), dataArrayList);
recyclerView.setAdapter(dataAdapter);
dataAdapter.setOnitemClickListener(MainActivity.this);
flagi();
dataAdapter.notifyDataSetChanged();
progressDialog.dismiss();
}
@Override
public void onFailure(Call<List<ModelJsona>> call, Throwable t) {
Log.e("Error", t.getMessage());
progressDialog.dismiss();
}
});}
private void flagi() {
ModelJsona pizza = new ModelJsona(R.drawable.and);
dataArrayList.add(pizza);
pizza = new ModelJsona(R.drawable.afg);
dataArrayList.add(pizza);
}
// Deklaracja menu z paskiem do wyszkuwiania danych
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
MenuItem search = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(search);
search(searchView);
return true;
}
// Metoda odpowiedzialna za prawidłowe zaznaczenie danych
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
// wyszukiwania danych
private void search(SearchView searchView) {
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
dataAdapter.getFilter().filter(newText);
return true;
}
});
}
// przesyłanie danych do aktywności scczegółowej
@Override
public void onItemClick(int position) {
Intent detailsIntent = new Intent(this,Details.class);
JsonMain click = dataArrayList.get(position);
detailsIntent.putExtra(EXTRA_COUNTRY_NAME,click.getName());
detailsIntent.putExtra(EXTRA_COUNTRY_SUBREGION,click.getSubregion());
detailsIntent.putExtra(EXTRA_COUNTRY_NATIVE_NAME,click.getNativeName());
detailsIntent.putExtra(EXTRA_COUNTRY_CAPITAL,click.getCapital());
startActivity(detailsIntent);
}
}