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.d
上onStopTrackingTouch
方法上的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;
}
}
這是應用畫面
在這段代碼中我一直在試圖改變藍牙