Witam,
Piszę aplikację na studia, na zaliczenie.
Mam problem z wywołaniem addaptera dla drugiego listview. Obecnie wygląda to tak:
package pl.nowacki.mikolaj.frontendpizza;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Typeface;
import android.media.Image;
import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.design.internal.BottomNavigationItemView;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.squareup.picasso.Picasso;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.Text;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import pl.nowacki.mikolaj.frontendpizza.Product;
public class MenuActivity extends AppCompatActivity {
//deklaracja zmiennych
private BottomNavigationView bottomMenu;
ArrayList<String> items = new ArrayList<String>();
private JSONArray array;
private ListView list;
private ListView list2;
Product[] produkty;
private String url = "http://mikolaj.pracainzynierska.hekko24.pl/images/mini/";
private PopupWindow mPopupWindow;
private LinearLayout linearLayout;
//koniec
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Intent intent = getIntent();
String item = intent.getStringExtra("Kategorie");
try {
array = new JSONArray(item);
} catch (JSONException e) {
e.printStackTrace();
}
bottomMenu = (BottomNavigationView) findViewById(R.id.bottomMenu);
bottomMenu.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_bootomMenu_menu:
//menu
break;
case R.id.action_bootomMenu_szukaj:
//szukajka
break;
case R.id.action_bootomMenu_koszyk:
//koszyk
break;
}
return true;
}
});
//spinner begin
Spinner dynamicSpinner = (Spinner) findViewById(R.id.spinnerList);
for (int i = 0; i < array.length(); i++) {
try {
JSONObject explrObject = array.getJSONObject(i);
items.add(explrObject.getString("nazwa"));
} catch (JSONException e) {
e.printStackTrace();
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, items);
dynamicSpinner.setAdapter(adapter);
dynamicSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// Log.v("item", (String) parent.getItemAtPosition(position));
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
//spiner end
//lista_produktów
list = (ListView) findViewById(R.id.listView1);
produkty = new Product[]{
new Product(1,1000,"Parmesan", "Hard, granular cheese","PIZZA","30CM", "20"),
new Product(2,1002,"Ricotta", "Italian whey cheese","PIZZA","40CM", "30"),
new Product(3,1003,"Fontina", "Italian cow's milk cheese","PIZZA","60CM", "40"),
new Product(4,1004,"Mozzarella", "Southern Italian buffalo milk cheese","Makaron","100gram", "20"),
new Product(5,1005,"Cheddar", "Firm, cow's milk cheese","PIZZA","300CM", "200"),
};
final ArrayAdapter<Product> popupadapter =
new ArrayAdapter<Product>(this, 0,produkty) {
@Override
public View getView(int position,
View convertView,
ViewGroup parent) {
final Product currentProduct = produkty[position];
if(convertView == null) {
ViewHolder viewHolder2 = new ViewHolder();
convertView = getLayoutInflater()
.inflate(R.layout.one_item_popup_layout, null, false);
viewHolder2.popup_cena = (TextView) convertView.findViewById(R.id.cena);
viewHolder2.popup_ilosc = (EditText) convertView.findViewById(R.id.popup_ilosc_sztuk);
viewHolder2.popup_jednostka = (TextView) convertView.findViewById(R.id.Jednostka);
viewHolder2.popup_minus = (ImageView) convertView.findViewById(R.id.ic_minus);
viewHolder2.popup_plus = (ImageView) convertView.findViewById(R.id.ic_plus);
viewHolder2.popup_zamow = (Button) convertView.findViewById(R.id.button_popup_zamow);
convertView.setTag(viewHolder2);
}
//listview_popup
TextView popup_jednostka =((ViewHolder) convertView.getTag()).popup_jednostka;
TextView popup_cena =((ViewHolder) convertView.getTag()).popup_cena;
ImageView popup_plus =((ViewHolder) convertView.getTag()).popup_plus;
ImageView popup_minus =((ViewHolder) convertView.getTag()).popup_minus;
EditText popup_ilosc=((ViewHolder) convertView.getTag()).popup_ilosc;
Button popup_zamow =((ViewHolder) convertView.getTag()).popup_zamow;
popup_jednostka.setText(currentProduct.jednostka);
//popup_cena.setText(currentProduct.cena);
/*popup_zamow.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(finalConvertView.getContext(), "Produkt dodano do koszyka.", Toast.LENGTH_SHORT).show();
}
});*/
//endlistview_popup
return convertView;
}
};
ArrayAdapter<Product> productArrayAdapter =
new ArrayAdapter<Product>(this, 0, produkty) {
@Override
public View getView(int position,
View convertView,
ViewGroup parent) {
final Product currentProduct = produkty[position];
if(convertView == null) {
convertView = getLayoutInflater()
.inflate(R.layout.one_item, null, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.product_name = (TextView)convertView.findViewById(R.id.nazwa_produktu);
viewHolder.product_description = (TextView)convertView.findViewById(R.id.skladniki);
viewHolder.product_image = (ImageView) convertView.findViewById(R.id.list_image);
viewHolder.product_id_zamow = currentProduct.id_produktu;
viewHolder.product_button = (Button) convertView.findViewById(R.id.button_zamow);
convertView.setTag(viewHolder);
}
TextView produkt_nazwa =((ViewHolder)convertView.getTag()).product_name;
TextView produkt_skladniki =((ViewHolder)convertView.getTag()).product_description;
ImageView produkt_zdjecie = ((ViewHolder)convertView.getTag()).product_image;
Button produkt_przycisk = ((ViewHolder) convertView.getTag()).product_button;
Picasso.with(convertView.getContext()).load(url + currentProduct.id_towar_zdjecie+".jpg").into(produkt_zdjecie);
produkt_nazwa.setText(currentProduct.nazwa);
produkt_skladniki.setText(currentProduct.skladniki);
linearLayout = (LinearLayout) findViewById(R.id.zamow);
produkt_przycisk.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//popupwindow
LayoutInflater inflater = (LayoutInflater) v.getContext().getSystemService(LAYOUT_INFLATER_SERVICE);
// pobranie custom layout popup
View customView = inflater.inflate(R.layout.popup_layout,null);
// Initialize a new instance of popup window
mPopupWindow = new PopupWindow(
customView,
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
// wywolanie potrzebuje sdk min 21
if(Build.VERSION.SDK_INT>=21){
mPopupWindow.setElevation(5.0f);
}
list2 = (ListView) findViewById(R.id.popuplistview);
list2.setAdapter(popupadapter);
ImageButton closeButton = (ImageButton) customView.findViewById(R.id.ib_close);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// close
mPopupWindow.dismiss();
}
});
mPopupWindow.showAtLocation(linearLayout, Gravity.CENTER,0,0);
//end popup
}
});
return convertView;
}
};
list.setAdapter(productArrayAdapter);
//lista end
}
static class ViewHolder{
public TextView product_name;
public TextView product_description;
public ImageView product_image;
public int product_id_zamow;
public Button product_button;
public TextView popup_jednostka;
public TextView popup_cena;
public ImageView popup_plus;
public ImageView popup_minus;
public EditText popup_ilosc;
public Button popup_zamow;
}
}
Wygląd pierwszego listview: menu_listview
Jak powinien wyglądać drugi list view(nie wygląda, bo gdy chce go wywołać wysypuje się aplikacja o tym za chwilę): popup_one_item
Po naciśnięciu przycisku zamów z menu_listview otrzymuje taki o to błąd:
Kod błędu (niestety nie mogłem wstawić jako kod - limit znaków).
Poszukałem trochę w internecie i nie znalazłem niestety podobnych przypadków (czyli na 100% zrobiłem coś źle), nie wiem już niestety co zrobić. Chciałbym, żeby po naciśnięciu przycisku zamów, pokazało się okienko popup, które bedzię wyglądać jak obrazek one_iteam, uzupełnione danymi z tablicy produkty (na razi się nie ustawia wiem, chciałem, żeby mi się cokolwiek pokazało, wtedy pójdę dalej). Podsunie ktoś gdzie szukać błędów? Albo co warto przeczytać, żeby naprawić ten błąd? Dziękuje bardzo za udzieloną mi pomoc!