2016-04-08 25 views
0

Also im Wesentlichen habe ich eine Listenansicht, die einen benutzerdefinierten Adapter enthält, der sich mit der Formatierung der Listenansicht befasst. Die benutzerdefinierte Ansicht, die von dem Adapter verwandt wird, enthält ein Kontrolle-Kästchen, das mit dem Scheck überprüft werden soll, der gesperrt wird, wenn das Listenansichtselement ausgewählt wird. Nach vielen Suchen und verschiedenen Versuchen, dies zu erreichen, war ich nicht erfolgreich. Irgendwelche Ideen, wie dies zu erreichen wäre, würden sehr geschätzt werden.Kontrollkästchen aktiviert, wenn Listenansicht Element ausgewählt ist

Hier ist der Code für meine Hauptklasse ist:

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

Und hier ist der Code für meine Adapterklasse:

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

Sie möchten Ihre Listenansicht basierend auf Artikelauswahl ändern? –

+0

Neben jedem Listenansicht-Element befindet sich ein Kontrollkästchen. Wenn das Listenansichtselement ausgewählt ist (nicht wenn das Kontrollkästchen aktiviert ist), möchte ich, dass das Kontrollkästchen aktiviert ist. –

+0

Verwenden Sie vi.setOnClickListener in der Adapteransicht, es verhindert, dass die Listenansicht den Elementklick-Listener verarbeitet, dann können Sie Ihre Highlight und etc in die onClick-Methode im Adapter setzen –

Antwort

0

In Ihrem AbViewAdapter.getView() ein OnClickListener

Dann fügen, in der OnClickListener, schalten Sie die Checkbox Zustand mit: check.setChecked(!isChecked())

Voll Antwort hier: Android listview with check boxes?

Voll Tutorial hier: http://www.mysamplecode.com/2012/07/android-listview-checkbox-example.html

+0

Das ist ähnlich wie das, was ich brauche, aber ich benutze das Kontrollkästchen nur als kosmetisches Ding . Das Kontrollkästchen ist nicht zur Auswahl gedacht, sondern es wird geprüft, wenn das entsprechende Listenansichtselement ausgewählt ist. Das Aktivieren des Kontrollkästchens ist nicht dazu gedacht, etwas zu tun. –

+0

@Deus Sollte der Benutzer in der Lage sein, mehrere Checkboxen zu markieren, oder möchten Sie Single-Mode, wie Radio-Buttons? –

+0

Nun, der Benutzer wird keine Checkboxen in der Theorie auswählen können. Die Kontrollkästchen sind nur dazu da, zu bestätigen, dass sie den Listenansichtsartikel ausgewählt haben. Es können jedoch mehrere Kontrollkästchen automatisch ausgewählt werden, wenn der Benutzer mehrere Listenansichtselemente auswählt. –

0

, weil, wenn Sie Ihre Listenansicht bewegen, wird das Element in A zerstört. Wenn Sie nach oben scrollen, wird das Objekt in A neu erstellt.

enter image description here

So ist die CheckBox ist neu erstellen zu müssen Sie Artikel speichern, wenn diese aktuellen Zustand wiederherzustellen, wenn Scroll-up. Lassen Sie sehen ViewHolder

Verwandte Themen