ListView z buttonem i spinnerem-reakcja na klikniecia

0

Czesc, tworze sobie listview, gdzie chce umiescic spinner i button w kazdym z wierszy. Tak wyglada moj layout, ktory ustawiam w adapterze:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/karmazynowy">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView
        android:layout_weight="9"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/bialy"
        android:textSize="20sp"
        android:id="@+id/mainListViewTextView" />

    <EditText
        android:layout_weight="4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/bialy"
        android:textSize="20sp"
        android:id="@+id/qtyEditText"
        android:layout_gravity="center_horizontal" />
    <Spinner
        android:layout_weight="4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:entries="@array/units"
       />


    <Button
        android:layout_weight="9"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@string/edit"
        android:id="@+id/editButton"
        android:layout_gravity="left" />
</LinearLayout>


</LinearLayout>

i teraz problem mam taki, ze chcialbym aby moja aplikacja reagowala na klikniecie tego spinnera w pewien sposob i w inny sposob jesli uzytkownik kliknie przycisk stad http://forum.android.com.pl/topic/153460-listview-z-checkboxem-i-brak-reakcji-na-klikniecia/ dowiedzialem sie jak zrobic cos takiego z checkboxem z tym, ze tam bylo to latwiejsze bo wylaczalem focus w checkboxie i po kliknieciu na konkretny wiersz listview zmienialem setChecked checkboxa na przeciwny, a tutaj to nie przejdzie , stad moje pytanie jak sobie z tym poradzic?

Z gory dzieki za wszelkie sugestie!

0

Rozumiem, że masz napisany customowy adapter dla listview?

0

Tak o to i on

public class MainActivityAdapter extends BaseAdapter {

private Context context;
    private ArrayList<ProductItem> data;
    public MainActivityAdapter(Context context,ArrayList<ProductItem>data){
        this.context=context;
        this.data=data;
    }
    @Override
    public int getCount() {
        return data!=null?data.size():0;
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater=LayoutInflater.from(context);
        View view =inflater.inflate(R.layout.mainactivityadapterlayout, parent, false);
        TextView textView =(TextView)view.findViewById(R.id.mainListViewTextView);
        EditText qtyEditText=(EditText) view.findViewById(R.id.qtyEditText);
        ProductItem productItem=(ProductItem)getItem(position);
        String text = productItem.getProductName();
        double qty = productItem.getProductQty();

        textView.setText(text);
        Spinner spinner=(Spinner)view.findViewById(R.id.spinner);
        qtyEditText.setText(String.format("%.2f",qty));
        return view;
    }
}
0

A gdzie tu jest problem? Chcesz inaczej reagować na spinner a inaczej na button. Do buttona podpinasz clickListenera i obsługujesz zdarzenie, a do spinnera piszesz customową obsługę i też reagujesz na zdarzenie kliknięcia/rozwinięcia.

Może najpierw spróbuj to napisać i powiedz gdzie masz błędy. Nie podjąłeś nawet próby obsłużenia tych przypadków.

0

Ale dodaje te interfejsy w klasie swojego adaptera?

0

Tak, ponieważ reagujesz na kliknięcie każdego buttona z każdego pojedyńczego widoku. Tak na prawdę BaseAdapter buduje widok dla pojedynczego wiersza Twojego listview, a skoro buduje dla każdego, to automatycznie każdy ma podpiętego listenera.

0
public class MainActivityAdapter extends BaseAdapter {

private Context context;
    private ArrayList<ProductItem> data;
    public MainActivityAdapter(Context context,ArrayList<ProductItem>data){
        this.context=context;
        this.data=data;
    }
    @Override
    public int getCount() {
        return data!=null?data.size():0;
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater=LayoutInflater.from(context);
        View view =inflater.inflate(R.layout.mainactivityadapterlayout, parent, false);
        TextView textView =(TextView)view.findViewById(R.id.mainListViewTextView);
        EditText qtyEditText=(EditText) view.findViewById(R.id.qtyEditText);
        ProductItem productItem=(ProductItem)getItem(position);
        String text = productItem.getProductName();
        double qty = productItem.getProductQty();
        textView.setText(text);
        Spinner spinner=(Spinner)view.findViewById(R.id.spinner);
        Listener listener = new Listener();
        spinner.setOnItemSelectedListener(listener);
        qtyEditText.setText(String.format("%.2f", qty)+listener.getUnits());
        return view;
    }
}

class Listener implements AdapterView.OnItemSelectedListener{
    private String units="kg";
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                   if(position==0){
                       units="kg";
                   }
        else{
                       units="szt";
                   }
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }

    public String getUnits(){
        return units+"";
    }
}

No i problem jest taki ze jak zmieniam wartosc w spinerze to w qtyEditText to nie jest uwzgledniane

0

Trochę brzydko to zrobiłeś i nieczytelnie.
Ja bym jednak zaimplementował ten listener jako anonimowy i w if'ie zmieniał edittext.
Spróbuj tak zrobić jak ja piszę to pewnie kod Ci się zrobi czytelniejszy.

0
 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater=LayoutInflater.from(context);
        View view =inflater.inflate(R.layout.mainactivityadapterlayout, parent, false);
        
        TextView textView =(TextView)view.findViewById(R.id.mainListViewTextView);
        final EditText qtyEditText=(EditText) view.findViewById(R.id.qtyEditText);
        
        ProductItem productItem=(ProductItem)getItem(position);
        String text = productItem.getProductName();
        
        final double qty = productItem.getProductQty();
        textView.setText(text);
        Spinner spinner=(Spinner)view.findViewById(R.id.spinner);
       
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if(position==0)
                qtyEditText.setText(String.format("%.2f", qty)+"kg");
                else
                    qtyEditText.setText(String.format("%.2f", qty)+"szt");
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
        return view;
    }

wrzucam tylko jedna metode bo tam sie dzieje cala magia

0

Sory dziala moj blad, dzieki za pomoc i jeszcze raz przepraszam za zamieszanie

0

a ile masz tych pozycji w spinner? Bo widzę, że masz jakąś tablicę tam podpiętą units, ale ile tam jest wartości to nie wiem.

0

Wiesz co to wszystko juz mi dziala, nawet teraz nie wiem czemu nie dzialalo wczesniej, ale dzieki bardzo za pomoc, poraz kolejny bo to nie pierwszy moj post na ktory dajesz mi odpowiedz :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1