如何将微调框插入到ListView的每一行中 [英] How to insert a Spinner into each row of a ListView

查看:70
本文介绍了如何将微调框插入到ListView的每一行中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将Spinner插入FragmentonCreateView中?
如果我在以下位置写一个Spinner:

How can I insert a Spinner into onCreateView of a Fragment?
If I write a Spinner under:

 ViewGroup rootView = (ViewGroup)inflater.inflate(R.layout.fragment_list2, container, false);

这将导致Spinner的布局错误,但它是PlanetAdapter中对象的正确布局.
这样,我希望微调器进入Listview的行视图,而在ListView下具有微调器.
Spinner进入另一个名为single_listview_item的布局.
在下面,您可以看到我到目前为止所做的尝试:

it will result into incorrect layout for the Spinner but it is the correct layout for object in PlanetAdapter.
In this way I have spinner under the listview while I want spinner into row view of the Listview.
Spinner is into another layout named: single_listview_item.
Below you can see what I tried so far:

片段:

public class MyListFragment extends Fragment implements
        android.widget.CompoundButton.OnCheckedChangeListener,AdapterView.OnItemSelectedListener {

    ListView lv;
    ArrayList<Planet> planetList;
    static PlanetAdapter plAdapter;
    private TextView txtName;
    private TextView txtEmail;
    private Button btnLogout;
    private Spinner spinner1;
    private Spinner spinner2;
    Spinner spinner;

    private SQLiteHandler db;
    private SessionManager session;
    BirraAdapter biAdapter;
    PlanetAdapter.PlanetHolder holder;
    private static Context context = null;
    private static FragmentActivity mInstance;

    Integer[] imageId = {
            R.mipmap.androtuto,
            R.mipmap.ic_launcher,
            R.mipmap.ic_launcher,
            R.mipmap.ic_launcher,
            R.mipmap.ok,
            /*R.drawable.image6,
            R.drawable.image7*/

    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the custom_spinner_items for this fragment
        //super.onDestroy();

        SharedPreferences settings = getContext().getSharedPreferences("states", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.clear();
        editor.commit();
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_list2, container, false);

        spinner = (Spinner) rootView.findViewById(R.id.simpleSpinner);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this.getContext(),
                R.array.country_arrays, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);
        context = getActivity();
        mInstance = getActivity();
        txtName = (TextView) rootView.findViewById(R.id.name);
        txtEmail = (TextView) rootView.findViewById(R.id.numero_telefonico);
        btnLogout = (Button) rootView.findViewById(R.id.btnLogout);

        // SqLite database handler
        db = new SQLiteHandler(context.getApplicationContext());


        // session manager
        session = new SessionManager(context.getApplicationContext());
/*

        if (!session.isLoggedIn()) {
            logoutUser();
        }
*/

        // Fetching user details from SQLite
        HashMap<String, String> user = db.getUserDetails();

        String name = user.get("name");
        //String email = user.get("email");
//      String email = user.get("email");
        String email = user.get("numero_telefonico");


        // Displaying the user details on the screen
        System.out.println(name + email);

        txtName.setText(name);
        txtEmail.setText(email);
    /*  Button mButton = (Button) rootView.findViewById(R.id.button);
        mButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showResult(v);


            }
        });*/
        //return inflater.inflate(R.custom_spinner_items.fragment_list2, container, false);
        btnLogout.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                logoutUser();
            }
        });
    /*  Spinner spinner = (Spinner) getView().findViewById(R.id.simpleSpinner);
        ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, state);
        adapter_state
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter_state);
        spinner.setOnItemSelectedListener(this);*/


        return rootView;
    }

PLANETADAPTER:

PLANETADAPTER:

public abstract class PlanetAdapter extends ArrayAdapter<Planet> implements CompoundButton.OnCheckedChangeListener

{

    private List<Planet> planetList = null;
    private Context context = null;
    ArrayList<Birra> objects;
    public boolean Checked;
    private final Integer[] imageId;

    public PlanetAdapter(List<Planet> planetList, Context context,Integer[] imageId) {

        super(context, R.layout.single_listview_item, planetList);
        this.planetList = planetList;
        this.context = context;
        this.imageId = imageId;
    }


    public class PlanetHolder {
        public TextView planetName;
        public TextView distView;
        public TextView valuta;
        public CheckBox chkBox;
        public EditText edit;
        public TextView caratteristica;
        public boolean checked;
        public TextView id;
        public ImageView imageView;
        public Spinner spinner;
    }

    @Override
    public int getCount() {
        return planetList.size();
    }

    @Override
    public Planet getItem(int position) {
        return planetList.get(position);
    }




    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        View row = convertView;
        PlanetHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(R.layout.single_listview_item, parent, false);
            holder = new PlanetHolder();
            holder.planetName = (TextView) row.findViewById(R.id.name);
            holder.distView = (TextView) row.findViewById(R.id.dist);
            holder.valuta = (TextView) row.findViewById(R.id.valuta);
            holder.chkBox = (CheckBox) row.findViewById(R.id.chk_box);
            holder.edit = (EditText) row.findViewById(R.id.editText);
            holder.spinner = (Spinner) row.findViewById(R.id.simpleSpinner);

            holder.caratteristica=(TextView) row.findViewById(R.id.caratteristica);
            holder.imageView = (ImageView) row.findViewById(R.id.ivImage);
            holder.edit.setVisibility(View.GONE);
            holder.edit.setEnabled(false);
            holder.spinner.setVisibility(View.GONE);

            // holder.id = (TextView) row.findViewById(R.id.id);


            row.setTag(holder);

        } else {
            holder = (PlanetHolder) row.getTag();
        }

        final Planet p = planetList.get(position);
        holder.imageView.setImageResource(imageId[position]);
        holder.planetName.setText(p.getName());
        holder.distView.setText("" + p.getDistance());
        holder.valuta.setText("" + p.getValuta());
        holder.chkBox.setChecked(p.isSelected());
        holder.chkBox.setTag(p);
        holder.caratteristica.setText(p.getCaratteristica());
       holder.edit.setEnabled(false);
        SharedPreferences states = getContext().getSharedPreferences("states", Context.MODE_PRIVATE);
        boolean isChecked = states.getBoolean("holder.chkBox" + holder.planetName.getText().toString(), false);
        System.out.println(isChecked);
        if (isChecked) {
            holder.chkBox.setChecked(true);
            holder.edit.setVisibility(View.VISIBLE);
            holder.edit.setEnabled(true);
            holder.spinner.setVisibility(View.VISIBLE);

            SharedPreferences statess = getContext().getSharedPreferences("states", Context.MODE_PRIVATE);
            String string = statess.getString("finalHolder.edit" + holder.planetName.getText().toString(), holder.edit.getText().toString().trim());
            holder.edit.setText(string);


        } else {
            holder.chkBox.setChecked(false);
            holder.edit.setVisibility(View.GONE);
            holder.edit.setEnabled(false);
            holder.spinner.setVisibility(View.GONE);


         }

        holder.chkBox.setOnCheckedChangeListener(PlanetAdapter.this);
       // final BirraHolder finalHolder = birraHolder;
        final PlanetHolder finalHolder = holder;

        holder.chkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (finalHolder.chkBox.isChecked()) {
                    finalHolder.edit.setVisibility(View.VISIBLE);
                    finalHolder.edit.setEnabled(true);
                    finalHolder.spinner.setVisibility(View.VISIBLE);
                    SharedPreferences states = getContext().getSharedPreferences("states", Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = states.edit();
                    editor.putBoolean("holder.chkBox" + finalHolder.planetName.getText().toString(), true);
                    editor.commit();
                    finalHolder.edit.addTextChangedListener(new TextWatcher() {
                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                        }

                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) {
                        }

                        @Override
                        public void afterTextChanged(Editable s) {
                            p.setQuantità(finalHolder.edit.getText().toString().trim());
                            SharedPreferences states = getContext().getSharedPreferences("states", Context.MODE_PRIVATE);
                            SharedPreferences.Editor editor = states.edit();
                            editor.putString("finalHolder.edit" + finalHolder.planetName.getText().toString(), finalHolder.edit.getText().toString().trim());
                            editor.commit();


                        }
                    });

                  /*  SharedPreferences states = getContext().getSharedPreferences("states", Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = states.edit();
                    editor.putBoolean("holder.chkBox" + finalHolder.planetName.getText().toString(), true);
                    editor.commit();*/
                    //Utility.putPizzaItem(p);
                    //Utility.getPizzaItem(p);


                } else {
                    finalHolder.edit.setVisibility(View.GONE);
                    finalHolder.edit.setEnabled(false);
                    finalHolder.edit.setText("");
                    finalHolder.spinner.setVisibility(View.GONE);


                }

            }
        });
        /*holder.chkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (finalHolder.chkBox.isChecked()) {
                    finalHolder.edit.setVisibility(View.VISIBLE);
                    finalHolder.edit.setEnabled(true);
                    SharedPreferences states = getContext().getSharedPreferences("states", Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = states.edit();
                    editor.putBoolean("holder.chkBox", true);
                    //pizzaSelected.put(p.getId(), p);
                    System.out.println(p.getId());
                } else {

                    finalHolder.edit.setVisibility(View.GONE);
                    finalHolder.edit.setEnabled(false);
                    finalHolder.edit.setText(null);
                    pizzaSelected.remove(p.getId());

                }

            }
        });
*/


       /* finalHolder.edit.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                p.setQuantità(finalHolder.edit.getText().toString().trim());
                SharedPreferences states = getContext().getSharedPreferences("states", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = states.edit();
                editor.putString("finalHolder.edit" + finalHolder.planetName.getText().toString(), finalHolder.edit.getText().toString().trim());
                editor.commit();


            }
        });
*/

       // holder.planetName.setText(p.getName());
       // holder.distView.setText("" + p.getDistance());
       // holder.valuta.setText("" + p.getValuta());
       // holder.chkBox.setChecked(p.isSelected());
       // holder.chkBox.setTag(p);
       // holder.edit.setEnabled(false);
        //  holder.id.setId(p.getId());

        return row;
    }

    ArrayList<Planet> getBox() {
        ArrayList<Planet> box = new ArrayList<Planet>();
        for (Planet p : planetList) {
            if (p.isSelected())
                box.add(p);
        }
        return box;
    }



    }

FRAGMENT_LIST2:

FRAGMENT_LIST2:

<?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"
    android:orientation="vertical"
    android:weightSum="1"
    android:layout_marginLeft="5dp"
    ><!--android:onClick="showResult"-->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:gravity="center"
        android:orientation="horizontal" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/welcome"
        android:textSize="20dp"
        android:layout_marginLeft="5dp"
        />

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textColor="@color/lbl_name"
            android:textSize="24dp"
            android:layout_marginLeft="5dp"
            />

    <Button
        android:id="@+id/btnLogout"
        android:layout_width="122dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="40dip"
        android:background="@color/btn_logut_bg"
        android:text="@string/btn_logout"
        android:textAllCaps="false"
        android:textColor="@color/white"
        android:textSize="15dp"
        android:layout_marginLeft="5dp"
        />

</LinearLayout>

    <TextView
        android:id="@+id/numero_telefonico"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/lbl_name"
        android:textSize="13dp" />

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="400dp">

    </ListView>
    <Spinner
        android:id="@+id/simpleSpinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:entries="@array/country_arrays"/>
<!--    <Button
        android:id="@+id/button"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:onClick="showResult"
        android:text="get_answer">
    </Button>-->

    </LinearLayout>

SINGLE_LISTVIEW_ITEM:

SINGLE_LISTVIEW_ITEM:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <CheckBox 
        android:id="@+id/chk_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true" />
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:orientation="vertical"
        android:layout_weight="1" >

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/chk_box"
        android:textStyle="bold"
        android:textColor="#000000" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/caratteristica"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/name"
                android:layout_toRightOf="@id/chk_box"
                android:textStyle="italic" />
        </LinearLayout>

        <!-- <TextView
             android:id="@+id/id"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginLeft="5dp"
             android:textSize="12sp"
             android:textStyle="italic"/>-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <TextView
        android:id="@+id/dist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/caratteristica"
        android:layout_toRightOf="@id/chk_box"
        android:textSize="12sp"
        android:textStyle="italic" />
        <TextView
            android:id="@+id/valuta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:textSize="12sp"
            android:textStyle="italic" />
    </LinearLayout>
    <EditText
        android:layout_width="196dp"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/editText"
        android:hint="quantità"
        >
    </EditText>
        <Spinner
            android:id="@+id/simpleSpinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="50dp"
            android:entries="@array/country_arrays"/>
    </LinearLayout>
    <ImageView
        android:id="@+id/ivImage"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:layout_marginRight="5dp"
        android:layout_gravity="center"




        />
</LinearLayout>

MyListAdapter:

MyListAdapter:

public  class MyListAdapter extends ArrayAdapter implements AdapterView.OnItemSelectedListener  {
    Spinner spinner;

    /*public MyListAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }*/

    public MyListAdapter(Context context) {
        super(context, R.layout.single_listview_item);
    }





        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
            System.out.println("ciao");

            spinner = (Spinner) convertView.findViewById(R.id.simpleSpinner);
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                    getContext(),
                    R.array.country_arrays,
                    android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(adapter);
            spinner.setOnItemSelectedListener(this);

/*
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
*/
           /*     @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    //Spinner spinner = null;
                   // String selState = (String) ((Spinner) parent).getSelectedItem();

                    spinner.setSelection(position);
                    String selState = (String) ( parent).getSelectedItem();
                    Toast.makeText(
                            parent.getContext(),
                            "Clicked on Planet: " + selState + "", Toast.LENGTH_SHORT).show();
                }

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

                }


            });*/



            return row;
        }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        spinner.setSelection(position);
        String selState = spinner.getSelectedItem().toString();
        System.out.println(selState);
        Toast.makeText(
                getContext(),
                "Clicked on Planet: " + selState + "", Toast.LENGTH_SHORT).show();
       /* Toast.makeText(parent.getContext(),
                "OnItemSelectedListener : " + parent.getItemAtPosition(position).toString(),
                Toast.LENGTH_SHORT).show();*/
    }

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

    }


   /* @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        String selState = (String) spinner.getSelectedItem();
        System.out.println(selState);
        Toast.makeText(
                getContext(),
                "Clicked on Planet: " + selState + "", Toast.LENGTH_SHORT).show();
    }

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

    }*/

    }

推荐答案

如果要在ListView的每一行中重复Spinner,则应将其放在single_listview_item.xml而不是fragment_list2.xml中.然后,通常在Fragment中为fragment_list2.xml充气,查找ListView(findViewById),实例化Adapter并将其设置为ListView(setAdapter). Adapter负责加载single_listview_item.xml(因此是Spinner)并设置自己的Adapter.您不应该在Fragment中查找微调框,因为一旦加载了它,就可以有多个实例(每行一个).

If you want the Spinner repeated inside each row of the ListView, you should put it inside single_listview_item.xml, not in fragment_list2.xml. Then you normally inflate fragment_list2.xml in your Fragment, look for the ListView (findViewById), instantiate the Adapter and set it into the ListView (setAdapter). The Adapter has the responsibility to load single_listview_item.xml (and so the Spinner) and setting its own Adapter. You shouldn't look for the spinner inside your Fragment, because, once it's loaded, you can have multiple instances of it (one for each row).

因此,在您的FragmentonCreateView中:

ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_list2, container, false);
ListView listView = (ListView) rootView.findViewById(R.id.listview);
ListAdapter listAdapter = new MyListAdapter();
listView.setAdapter(listAdapter);

然后,在MyListAdaptergetView方法中:

Spinner spinner = (Spinner) convertView.findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                             getContext(),
                             R.array.country_arrays,
                             android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

基本上,您必须在另一个实例中实例化一个Adapter,因此您必须创建另一个类(MyListAdapter).

Basically you have to instantiate an Adapter inside another one, so you have to create another class (MyListAdapter).

这篇关于如何将微调框插入到ListView的每一行中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆