0

내 응용 프로그램에서 일부 부품을 변경하려고합니다. 각 탭이 내 목록보기에서 데이터를 변경하도록 내 앱을 설정하는 방법을 알 수 없습니다. 어떤 도움을 주셔서 감사합니다. 내 탭 설치 클래스 :TabHost onTabChangeListener - 목록보기 어댑터 설정

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

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

어댑터 클래스

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

문제는 그 정의를 보여주기 위해 내 어댑터를 설정하는 방법을 몰라 배열은 Im 만들기 (예 : w29w1m)를 나열합니다. 어떤 도움을 주셔서 감사합니다! 감사!

답변

0

어댑터 내부의 데이터를 변경하려는 경우 어댑터에서 설정 한 목록을 변경해보십시오. 그런 다음 notifyDataSetChanged()을 어댑터에 연결하십시오. 예를 들어 LVAdapter lvAdapter = new LVAdapter(context, list); (또는 어댑터에서 사용하는 매개 변수)과 같은 어댑터를 인스턴스화 한 경우 ListView에 포함 할 내용으로 목록을 변경 한 다음 lvAdapter.notifyDataSetChanged();으로 호출하십시오.

그러나 어댑터를 변경하려면 탭을 변경할 때마다 다른 어댑터를 목록보기로 설정하십시오.

또한 각 탭 고유 ID를 고유하게 만드는 것이 좋습니다.

관련 문제