2016-04-08 1 views
0

Итак, у меня есть список, содержащий пользовательский адаптер, который имеет дело с форматированием списка. Пользовательский вид, используемый адаптером, содержит флажок, который я хочу проверить, когда проверка заблокирована, когда выбран элемент списка. После долгих поисков и различных попыток добиться этого я не добился успеха. Любые идеи о том, как это сделать, будут очень признательны.Проверка флажка при выборе элемента списка

Вот код для моего основного класса:

public class AbWorkout extends Activity { 

Button back; 
ListView workoutExerciseList; 
WorkoutTracker tracker; 

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


    /** 
    * The database used to pull all exercises for this workout routine 
    */ 
    final DatabaseHandler db = new DatabaseHandler(this); 
    final SQLiteDatabase database = db.getReadableDatabase(); 

    final Context context = this; 

    /** 
    * Get all exercises from Triceps and Chest workout and put in arraylist 
    */ 
    workoutExerciseList = (ListView)findViewById(R.id.listView10); 
    final List<String> arrayWorkoutExercises = new ArrayList<String>(); 
    final ArrayAdapter<String> exListAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_multiple_choice, arrayWorkoutExercises); 
    workoutExerciseList.setAdapter(exListAdapter); 


      //Holds all the available exercises 
    final List<WorkoutTracker> exerciseList = db.getRepetitionWorkoutRoutine(context, database, "Abs"); 

    /** 
    * Populates the listView with each exercise for this workout routine. This includes the 
    * each exercise name, the number of repetitions, the weight of the exercise, and any 
    * comments included. 
    */ 
    List<AbWorkout.RepListViewItem> repProgressList = new ArrayList<>(); 
    for(int i = 0; i<exerciseList.size(); i++) { 
     final int j = i; 
     repProgressList.add(new AbWorkout.RepListViewItem() 
     {{ 
       REPETITIONS = exerciseList.get(j).getReps(); 
       WEIGHT = exerciseList.get(j).getWeight(); 
       COMMENT = exerciseList.get(j).getComment(); 
       EXERCISE_NAME = exerciseList.get(j).getExerciseName(); 
      }}); 


    } 
    final AbViewAdapter adapter = new AbViewAdapter(this, repProgressList); 
    workoutExerciseList.setAdapter(adapter); 


    CheckBox checkBox = (CheckBox)findViewById(R.id.CheckBox); 

    workoutExerciseList.setItemChecked(ListView.CHOICE_MODE_MULTIPLE, true); 

    /* 
     Upon selection of an exercise, it is highlighted and its name, date, 
     and number of reps is stored in repetition progress table 
    */ 
    workoutExerciseList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) { 

      CheckBox check = (CheckBox) findViewById(R.id.CheckBox); 
      //check.setChecked(true); 

      Calendar calendar = Calendar.getInstance(); 
      SimpleDateFormat format = new SimpleDateFormat("MM/dd/yy"); 
      //Get today's date formatted like this: dd-MM-yy 
      String exDate = format.format(calendar.getTime()); 


      //When exercise is selected, change the color and make it unselectable. 
      myAdapter.getChildAt(myItemInt).setBackgroundColor(Color.MAGENTA); 
      myAdapter.getChildAt(myItemInt).setEnabled(false); 
      myAdapter.getChildAt(myItemInt).setClickable(false); 
      myView.setClickable(true); 


      tracker = exerciseList.get(myItemInt); 
      db.addNewRepProgress(new WorkoutTracker(tracker.getExerciseName(), tracker.getReps(), tracker.getWeight(), tracker.getComment(), exDate), context, database); 
      Toast.makeText(context.getApplicationContext(), "Workout Progress was successfully saved.", Toast.LENGTH_LONG).show(); 

     } 
    }); 


    back = (Button)findViewById(R.id.back); 
    back.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_ab_workout, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


public class RepListViewItem 
{ 
    public int REPETITIONS; 
    public double WEIGHT; 
    public String COMMENT; 
    public String EXERCISE_NAME; 
    public String DATE; 
} 
} 

А вот код для моего класса адаптера:

public class AbViewAdapter extends BaseAdapter 
{ 

LayoutInflater inflater; 
List<AbWorkout.RepListViewItem> items; 
int pos = 0; 

public AbViewAdapter(Activity context, List<AbWorkout.RepListViewItem> items) { 
    super(); 

    this.items = items; 
    this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return items.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    AbWorkout.RepListViewItem item = items.get(position); 
    View vi=convertView; 

    if(convertView==null) 
     vi = inflater.inflate(R.layout.rep_item_row, null); 


    TextView exerciseName = (TextView)vi.findViewById(R.id.FullProgress); 
    TextView exerciseReps = (TextView)vi.findViewById(R.id.Time); 
    TextView exerciseComment = (TextView)vi.findViewById(R.id.Comment); 
    TextView exerciseWeight = (TextView)vi.findViewById(R.id.Distance); 
    CheckBox check = (CheckBox)vi.findViewById(R.id.CheckBox); 

    exerciseName.setText(item.EXERCISE_NAME); 
    exerciseReps.setText(String.valueOf(item.REPETITIONS)); 
    exerciseComment.setText(item.COMMENT); 
    exerciseWeight.setText(String.valueOf(item.WEIGHT)); 

    pos = position; 

    return vi; 
} 
} 
+0

Вы хотите изменить свой список на основе выбора позиции? –

+0

Рядом с каждым элементом списка есть флажок. Всякий раз, когда выбран элемент списка (не когда этот флажок установлен), я хочу, чтобы флажок был установлен. –

+0

use vi.setOnClickListener в режиме просмотра адаптера запрещает просмотр списка обрабатывать элемент click listener, тогда вы можете поместить свою подсветку и т. Д. В метод onClick внутри адаптера. –

ответ

0

В вашем AbViewAdapter.getView(), добавьте OnClickListener

Тогда, в OnClickListener, переключить состояние флажка с: check.setChecked(!isChecked())

Полный ответ здесь: Android listview with check boxes?

Полный учебник здесь: http://www.mysamplecode.com/2012/07/android-listview-checkbox-example.html

+0

Это похоже на то, что мне нужно, но я просто использую флажок как косметическую вещь , Флажок не предназначен для выбора, но он проверяется, когда выбран соответствующий элемент списка. Проверка флажка не предназначена для чего-либо. –

+0

@Deus Должен ли пользователь выбрать несколько флажков, или вы хотите одномодовую, например, радиокнопки? –

+0

Ну, пользователь не сможет в любой момент выбрать какие-либо флажки. Флажки находятся там, чтобы подтвердить, что они выбрали этот элемент списка. Но несколько флажков могут быть выбраны автоматически, если пользователь выбирает несколько элементов списка. –

0

, потому что, когда вы крутите ваш ListView, элемент в А будет уничтожен. При прокрутке вверх элемент в A будет воссоздан.

enter image description here

Так CheckBox повторно создать слишком, вам нужно сохранить элемент, если восстановить этот текущее состояние, когда прокрутки вверх. Посмотрите ViewHolder

 Смежные вопросы

  • Нет связанных вопросов^_^