0

Je suis en train de changer quelques pièces dans mon application. Je n'arrive pas à comprendre comment configurer mon application de sorte que chaque onglet modifie les données de ma liste. Toute aide appréciée. Ma classe de configuration de l'onglet:TabHost onTabChangeListener - Mise en place d'adaptateur listview

public class WorkoutDaysActivity extends BaseActivity { 

    ListView mListView = new ListView(this); 
    ArrayList <CustomObject> w29w1m; 
    CustomListViewAdapter mCustomListViewAdapter; 


    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.workout_days); 
     mToolBar = activateToolbar(); 
     setUpNavigationDrawer(); 
     w29w1m.add(new CustomObject("Squat", "65%", "6", "150", false)); 

     final ArrayList <CustomObject> w29w1w = new ArrayList <CustomObject>(); 
     w29w1w.add(new CustomObject("Dead", "65%", "6", "150", false)); 

     final ArrayList <CustomObject> w29w1f = new ArrayList <CustomObject>(); 
     w29w1f.add(new CustomObject("Bench", "65%", "6", "150", false)); 

     TabHost tabHost = (TabHost) findViewById(R.id.TabHost1); 
     tabHost.setup(); 
     tabHost.addTab(tabHost.newTabSpec("1").setIndicator("Monday").setContent(objects)); 
     tabHost.addTab(tabHost.newTabSpec("1").setIndicator("Wednesday").setContent(objects)); 
     tabHost.addTab(tabHost.newTabSpec("1").setIndicator("Friday").setContent(objects)); 


    } 


    private TabHost.OnTabChangeListener mOnTabChangeListener = new TabHost.OnTabChangeListener() { 
     @Override 
     public void onTabChanged(String tabId) { 
      if (tabId.equalsIgnoreCase("1")) 
       mListView.setAdapter(mCustomListViewAdapter, w29w1m); 
     } 
    }; 

    private final TabHost.TabContentFactory objects = new TabHost.TabContentFactory() { 
     @Override 
     public View createTabContent(String tag) { 
      return mListView; 
     } 
    }; 
} 

classe customObject:

public class CustomObject implements Serializable { 

    private String exercise; 
    private String percent; 
    private String reps; 
    private String weight; 
    private boolean check1; 

    public CustomObject(String exercise, String percent, String reps, String weight, boolean check1) { 
     this.exercise = exercise; 
     this.percent = percent; 
     this.reps = reps; 
     this.weight = weight; 
     this.check1 = check1; 
    } 

    public String getExercise() { 
     return exercise; 
    } 

    public String getPercent() { 
     return percent; 
    } 

    public String getReps() { 
     return reps; 
    } 

    public String getWeight() { 
     return weight; 
    } 

classe Adaptateur

public class CustomListViewAdapter extends BaseAdapter { 

    private LayoutInflater inflater; 
    public ArrayList <CustomObject> objects; 
    boolean[] checkBoxState; 
    private CustomObject[] dataToBePopulated; 

    private class ViewHolder { 
     TextView txtExercise; 
     TextView txtPercent; 
     TextView txtReps; 
     TextView txtWeight; 
     CheckBox check1; 
    } 

    public void addAdapterItem(CustomObject item) { 
     objects.add(item); 
    } 

    public CustomListViewAdapter(Context context, ArrayList <CustomObject> objects){ 
     inflater = LayoutInflater.from(context); 
     this.objects = objects; 
     checkBoxState = new boolean[objects.size()]; 
    } 

    public int getCount() { 
     return dataToBePopulated != null ? dataToBePopulated.length : 0; 
    } 

    public CustomObject getItem(int position) { 
     return objects.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.workout_item, null); 
      holder.txtExercise = (TextView) convertView.findViewById(R.id.txtExercise); 
      holder.txtPercent = (TextView) convertView.findViewById(R.id.txtPercentage); 
      holder.txtReps = (TextView) convertView.findViewById(R.id.txtReps); 
      holder.txtWeight = (TextView) convertView.findViewById(R.id.txtWeight); 
      holder.check1 = (CheckBox) convertView.findViewById(R.id.check1); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.txtExercise.setText(objects.get(position).getExercise()); 
     holder.txtPercent.setText(objects.get(position).getPercent()); 
     holder.txtReps.setText(objects.get(position).getReps()); 
     holder.txtWeight.setText(objects.get(position).getWeight()); 
     holder.check1.setChecked(checkBoxState[position]); 

     holder.check1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (((CheckBox) v).isChecked()) { 
        checkBoxState[position] = true; 
       } else { 
        checkBoxState[position] = false; 
       } 
      } 
     }); 

     return convertView; 
    } 
} 

Le problème est que je ne sais pas comment configurer mon adaptateur pour montrer la coutume Listes de tableaux Im making (w29w1m par exemple). Toute aide grandement appréciée! Merci!

Répondre

0

Si vous allez juste changer les données à l'intérieur de l'adaptateur, essayez de changer la liste que vous avez défini sur l'adaptateur. Puis appelez le sur l'adaptateur. Par exemple, si vous avez l'adaptateur instancié comme LVAdapter lvAdapter = new LVAdapter(context, list); (ou tout autre paramètre que vous utilisez dans votre adaptateur), il suffit de changer la liste à ce que vous voulez que le ListView pour contenir, puis appelez lvAdapter.notifyDataSetChanged();.

Mais si vous souhaitez également modifier l'adaptateur, essayez de définir un autre adaptateur au listview chaque fois que l'onglet est modifiée.

Aussi, je suggère faire le tabSpec ids unique pour chacun.