Autore Topic: Inserire in una ListView, Button, Spinner e Switch  (Letto 86 volte)

Offline AngelSara

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Grand Prime
  • Sistema operativo:
    Android 5.0.2
Inserire in una ListView, Button, Spinner e Switch
« il: 03 Novembre 2016, 16:10:51 CET »
0
Buona sera a tutti,
scrivo poiché vorrei fare una ListView in cui poter mettere, oltre ad un Button, uno switch e uno spinner.
Ho implementato quindi un Adapter e usato un ViewHolder ma la ListView continua a non "vedersi" bene.
Inoltre, vorrei poter rendere "invisible" il button start una volta premuto. Ho provato con il setVisibility(View.GONE) ma devo impostarlo male in qualche modo.
MainActivity.java:

Codice (Java): [Seleziona]
public class MainActivity extends AppCompatActivity {

    private ArrayList<String> list = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //generate list
        list.add("item1");
        list.add("item2");


        //handle listview and assign adapter
        ListView lView = (ListView)findViewById(R.id.list_item);
        lView.setAdapter(new ListAdapter(this, R.layout.row_item, list));
        lView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, "List item was clicked at " + position, Toast.LENGTH_SHORT).show();
            }
        });
       
    }




}

ListAdapter.java
Codice (Java): [Seleziona]
public class ListAdapter extends ArrayAdapter<String> {

    private ArrayList<String> list;
    private int layout;
    private Context context;

    public ListAdapter(Context context, int resource, ArrayList<String> objects) {
        super(context, resource, objects);
        context = context;
        layout = resource;
        list = objects;
    }


    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        ViewHolder viewHolder = new ViewHolder();
        if (view == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            view = inflater.inflate(R.layout.row_item, null);
            viewHolder.button_start = (Button) view.findViewById(R.id.start_button);
            viewHolder.button_stop = (Button) view.findViewById(R.id.stop_button);
            viewHolder.device = (TextView) view.findViewById(R.id.list_item_string);
            viewHolder.device.setText(list.get(position));
            viewHolder.model = (TextView) view.findViewById(R.id.model);
            viewHolder.temperature = (TextView) view.findViewById(R.id.temperature);
            viewHolder.spinner = (Spinner) view.findViewById(R.id.spinner_model);
            viewHolder.aSwitch = (Switch) view.findViewById(R.id.switch1);
            view.setTag(viewHolder);
        }else
        {
            viewHolder = (ViewHolder) view.getTag();
        }

        viewHolder.button_start.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "start - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show();
                //do something
                notifyDataSetChanged();
            }
        });

        viewHolder.button_stop.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "delete - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show();
                //do something
                notifyDataSetChanged();
            }
        });


        return view;

    }

    static class ViewHolder
    {
        Button button_start;
        Button button_stop;
        TextView device;
        TextView model;
        TextView temperature;
        Spinner spinner;
        Switch aSwitch;
    }
}

activity_main.xml

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/activity_main"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="com.example.sara.myapplication.MainActivity">


    <ListView
       android:id="@+id/list_item"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_alignParentTop="true"
       android:layout_alignParentStart="true" />
</RelativeLayout>

row_item.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

    <RelativeLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_weight="1">

        <TextView
           android:text="Text"
           android:id="@+id/list_item_string"
           android:layout_width="fill_parent"
           android:layout_height="10pt"
           android:layout_marginLeft="5pt"
           android:layout_marginTop="2pt"
           android:textSize="10pt"
           android:layout_weight="1"/>

        <TextView
           android:text="Temperature: "
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_below="@+id/list_item_string"
           android:layout_alignStart="@+id/list_item_string"
           android:layout_marginTop="16dp"
           android:id="@+id/temperature" />

        <Switch
           android:text="Send to server "
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_below="@+id/temperature"
           android:layout_marginTop="12dp"
           android:layout_marginLeft="5pt"
           android:id="@+id/switch1"
           android:layout_alignParentEnd="true" />

        <TextView
           android:text="Model: "
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_below="@+id/switch1"
           android:layout_alignStart="@+id/switch1"
           android:layout_marginTop="14dp"
           android:id="@+id/model" />

        <Spinner
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_marginTop="11dp"
           android:id="@+id/spinner_model"
           android:layout_below="@+id/model"
           android:layout_alignStart="@+id/model" />
    </RelativeLayout>

    <Button
       android:text="Start"
       android:id="@+id/start_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

    <Button
       android:text="Stop"
       android:id="@+id/stop_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_toEndOf="@+id/start_button"/>

</LinearLayout>



Post unito: 04 Novembre 2016, 16:02:47 CET
Ho trovato questa opzione e nel mio caso funziona:

row_item l'ho chiamata row_item2:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent" android:layout_height="match_parent"
   android:animateLayoutChanges="true">

    <RelativeLayout
       android:id="@+id/rl_title_wrapper"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:minHeight="?listPreferredItemHeight">
        <android.support.v7.widget.AppCompatTextView
           android:id="@+id/tv_title"
           android:padding="16dp"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"/>

        <android.support.v7.widget.AppCompatTextView
           android:id="@+id/tv_description"
           android:padding="16dp"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"/>

        <Button
           android:text="Stop"
           android:id="@+id/stop_button"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentTop="true"
           android:layout_alignParentEnd="true" />

        <Button
           android:text="Start"
           android:id="@+id/start_button"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentTop="true"
           android:layout_toStartOf="@+id/stop_button" />

        <TextView
           android:text="Device"
           android:id="@+id/list_item_string"
           android:layout_width="fill_parent"
           android:layout_height="10pt"
           android:layout_marginLeft="5pt"
           android:textSize="8pt"
           android:layout_weight="1"
           android:layout_alignBaseline="@+id/tv_title"
           android:layout_alignBottom="@+id/tv_title"
           android:layout_alignParentEnd="true" />
    </RelativeLayout>

    <FrameLayout
       android:id="@+id/fl_wrapper"
       android:layout_below="@+id/rl_title_wrapper"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content">

    </FrameLayout>

    <TextView
       android:text="Temperature: "
       android:id="@+id/temperature"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_below="@+id/fl_wrapper"
       android:layout_alignStart="@+id/switch1" />

    <Switch
       android:text="Send to server "
       android:id="@+id/switch1"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_marginLeft="5pt"
       android:layout_marginTop="11dp"
       android:layout_below="@+id/temperature"
       android:layout_alignParentEnd="true" />

    <TextView
       android:text="Model: "
       android:id="@+id/model"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginTop="11dp"
       android:layout_below="@+id/switch1"
       android:layout_alignStart="@+id/switch1" />

    <Spinner
       android:id="@+id/spinner_model"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_below="@+id/model"
       android:layout_alignParentStart="true"
       android:layout_marginBottom="7pt"/>


</RelativeLayout>

ListAdapter:
Codice (Java): [Seleziona]
import java.util.ArrayList;

public class ListAdapter extends ArrayAdapter<String> {

    private ArrayList<String> list;
    private int layout;
    private Context context;

    public ListAdapter(Context context, int resource, ArrayList<String> objects) {
        super(context, resource, objects);
        context = context;
        layout = resource;
        list = objects;
    }


    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        ViewHolder viewHolder = new ViewHolder();
        if (view == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            view = inflater.inflate(R.layout.row_item2, null);
            viewHolder.button_start = (Button) view.findViewById(R.id.start_button);
            viewHolder.button_stop = (Button) view.findViewById(R.id.stop_button);
            viewHolder.device = (TextView) view.findViewById(R.id.list_item_string);
            viewHolder.device.setText(list.get(position));
            viewHolder.model = (TextView) view.findViewById(R.id.model);
            viewHolder.temperature = (TextView) view.findViewById(R.id.temperature);
            viewHolder.spinner = (Spinner) view.findViewById(R.id.spinner_model);
            viewHolder.aSwitch = (Switch) view.findViewById(R.id.switch1);
            view.setTag(viewHolder);
        }else
        {
            viewHolder = (ViewHolder) view.getTag();
        }

        final ViewHolder finalViewHolder = viewHolder;
        viewHolder.button_start.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "start - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show();
                //do something
                finalViewHolder.button_start.setVisibility(View.GONE);
                notifyDataSetChanged();
            }
        });

        viewHolder.button_stop.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "delete - Button was clicked for list item " + position, Toast.LENGTH_SHORT).show();
                //do something
                finalViewHolder.button_start.setVisibility(View.VISIBLE);
                notifyDataSetChanged();
            }
        });


        return view;

    }

    static class ViewHolder
    {
        Button button_start;
        Button button_stop;
        TextView device;
        TextView model;
        TextView temperature;
        Spinner spinner;
        Switch aSwitch;
    }
}
« Ultima modifica: 04 Novembre 2016, 16:02:47 CET da AngelSara, Reason: Merged DoublePost »