2015-02-05 60 views
0

首先,對不起英文不好。SeekBar在自定義listView中總是返回最後的位置

我有一個seekBar在自定義listView(在片段中),它很好地顯示了propper值,但是當我嘗試更改它們時,它總是嘗試更改最後一個seekBar的值。

這是適配器

public View getView(int position, View convertView, final ViewGroup parent) { 
     View v = convertView; 

     if(convertView==null){ 
      LayoutInflater linf=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v=linf.inflate(R.layout.activity_single_option,null); 
     } 

     soa=getItem(position); 

     TextView textView=(TextView)v.findViewById(R.id.singleOptionTextView); 
     textView.setText(soa.getTitle()); 

     SeekBar seekBar=(SeekBar)v.findViewById(R.id.singleOptionSeekBar); 
     seekBar.setMax(soa.getSeekBarMax()); 
     seekBar.setProgress(soa.getValue()); 

     seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      int prog=0; 
      SystemManager systemManager=new SystemManager(activity); 
      boolean status; 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
       prog=progress; 
      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
       Log.d("onStopTrackingTouch",soa.getTitle()); 
       switch (soa.getTitle()){ 
        case "Brillo": 
         systemManager.setBrightness(prog); 
         break; 
        case "WIFI": 
         status = prog == 1; 
         systemManager.toggleWifi(status); 
         break; 
        case "Datos Moviles": 
         status = prog == 1; 
         systemManager.toggleMobileData(status); 
         break; 
        case "Bluetooth": 
         status = prog == 1; 
         systemManager.toggleBluetooth(status); 
         break; 
       } 

      } 
     }); 

     return v; 
    } 

我把Log.donStopTrackingTouch方法上的getView方法,這樣我就可以看到哪些選項是我得到,並且總是最後。

這裏是我設置每個ListView項

package com.app.innergy; 


import android.os.Bundle; 
import android.app.Fragment; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v4.widget.ViewDragHelper; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.lang.reflect.Field; 
import java.util.ArrayList; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class CustomFragment extends Fragment { 

    ListView list; 

    public CustomFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     ViewGroup rootView=(ViewGroup)inflater.inflate(R.layout.fragment_custom, container, false); 

     ((MenuActivity)getActivity()).getSupportActionBar().hide(); 
     Toast.makeText(getActivity(),"Recuerda pulsar el botón \"Atrás\" para volver",Toast.LENGTH_LONG).show(); 

     int wifiStatus=0,bluetoothStatus=0,mobileDataStatus; 

     SystemManager systemManager=new SystemManager(getActivity().getApplicationContext()); 

     if(systemManager.isWifiEnabled()==1) 
      wifiStatus=0; 
     else if (systemManager.isWifiEnabled()==3) 
      wifiStatus=1; 

     if(systemManager.isBluetoothEnabled()==10) 
      bluetoothStatus=0; 
     else if (systemManager.isBluetoothEnabled()==1) 
      bluetoothStatus=1; 

     if(!systemManager.isMobileDataEnabled()) 
      mobileDataStatus=0; 
     else 
      mobileDataStatus=1; 

     ((MenuActivity)getActivity()).getmDrawerLayout().setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 

     list=(ListView)rootView.findViewById(R.id.listViewCustom); 

     final ArrayList<SingleOptionActivity> itemArray=new ArrayList<SingleOptionActivity>(); 

     SingleOptionActivity soa; 

     **soa=new SingleOptionActivity("Brillo",systemManager.getBrightness(),255); 
     itemArray.add(soa); 
     soa=new SingleOptionActivity("WIFI",wifiStatus,1); 
     itemArray.add(soa); 
     soa=new SingleOptionActivity("Datos moviles",mobileDataStatus,1); 
     itemArray.add(soa); 
     soa=new SingleOptionActivity("Bluetooth",bluetoothStatus,1); 
     itemArray.add(soa);** 

     SingleOptionAdapter singleOptionAdapter=new SingleOptionAdapter(getActivity(),itemArray); 

     list.setAdapter(singleOptionAdapter); 


     return rootView; 
    } 



} 

這是應用畫面

enter image description here

在這段代碼中我一直在試圖改變藍牙

回答

2

我發現自己是答案,我需要保存seekBar的位置,所以getView方法就像這樣結束。

public View getView(int position, View convertView, final ViewGroup parent) { 
     View v = convertView; 
     final int pos=position; 

     if(convertView==null){ 
      LayoutInflater linf=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v=linf.inflate(R.layout.activity_single_option,null); 
     } 

     soa=getItem(position); 

     TextView textView=(TextView)v.findViewById(R.id.singleOptionTextView); 
     textView.setText(soa.getTitle()); 

     SeekBar seekBar=(SeekBar)v.findViewById(R.id.singleOptionSeekBar); 
     seekBar.setMax(soa.getSeekBarMax()); 
     seekBar.setProgress(soa.getValue()); 

     seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      SingleOptionActivity soa=getItem(pos); 
      int prog=0; 
      SystemManager systemManager=new SystemManager(activity); 

      boolean status; 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
       prog=progress; 
      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
       Log.d("onStopTrackingTouch",soa.getTitle()); 
       switch (soa.getTitle()){ 
        case "Brillo": 
         systemManager.setBrightness(prog); 
         break; 
        case "WIFI": 
         status = prog == 1; 
         systemManager.toggleWifi(status); 
         break; 
        case "Datos Moviles": 
         status = prog == 1; 
         systemManager.toggleMobileData(status); 
         break; 
        case "Bluetooth": 
         status = prog == 1; 
         systemManager.toggleBluetooth(status); 
         break; 
       } 

      } 
     }); 

     return v; 
    } 
相關問題