2016-07-24 3 views
3

FragmentonCreateViewSpinner을 삽입하려면 어떻게해야합니까?ListView의 각 행에 Spinner를 삽입하는 방법

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

Spinner에 대한 잘못된 레이아웃으로 발생합니다하지만 PlanetAdapter에서 개체에 대한 올바른 레이아웃입니다 :
은 내가 Spinner에서 작성하는 경우.
이 방법으로 스피너를 Listview 아래에 놓고 Spinner를 Listview의 행 뷰로 만들 수 있습니다.
Spinnersingle_listview_item이라는 또 다른 레이아웃입니다.
아래에서 내가 지금까지 시도 것을 볼 수 있습니다

FRAGMENT :

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 :

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 :

<?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 :

<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 : 당신이 ListView의 각 행 내에서 반복 Spinner, 당신은하지 fragment_list2.xml에, single_listview_item.xml 안에 넣어해야합니다

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) { 

    }*/ 

    } 
+0

'fragment_list2.xml'의 내용을 첨부해야합니다. – manfcas

+0

나는 그것을 게시했다 : – user6612196

답변

0

. 그런 다음 일반적으로 Fragmentfragment_list2.xml을 부풀려 ListView (findViewById)을 찾고 Adapter을 인스턴스화하고 ListView (setAdapter)으로 설정합니다. Adaptersingle_listview_item.xml (따라서 Spinner)을로드하고 자체를 Adapter으로 설정해야합니다. Fragment 내부의 회 전자를 찾지 않아야합니다.로드 된 후에는 각 행마다 하나씩 여러 인스턴스를 가질 수 있기 때문입니다.

그래서, 당신의 FragmentonCreateView : 당신의 MyListAdaptergetView 방법 다음

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); 

그리고, :

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)를 만들어야합니다.

+0

나는 single_listview_item.xml에 넣었으나 프래그먼트 i는 fragment_list2.xml을 불러 냈다 – user6612196

+0

내 코드에 어떻게 쓸 수 있을까? 이것없이 – user6612196

+0

? 스피너 = (스피너) rootView.findViewById (R.id.simpleSpinner); \t \t ArrayAdapter와 = ArrayAdapter.createFromResource 어댑터 (this.getContext() \t \t \t \t R.array.country_arrays, android.R.layout.simple_spinner_item); \t \t adapter.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item); \t \t spinner.setAdapter (adapter); \t \t spinner.setOnItemSelectedListener (this); – user6612196

관련 문제