두 개의 ListView, treatmentListView 및 diaryListView가 있습니다. 치료 목록보기에서 항목을 클릭하면 해당 항목의 diaryListView를 표시하려고합니다. 내 문제는 MyDiaryAdapter에서 getView가 호출되지 않고 항목이 표시되지 않는다는 것입니다. 누구든지 고칠 수 있니?다중 ArrayAdapters - 마지막 뷰에서 getView가 호출되지 않습니다.
private void fillListView()
{
ArrayAdapter<Treatment> adapter = new MyListAdapter();
list = (ListView) findViewById(R.id.treatmentsListView);
list.setAdapter(adapter);
}
private void fillDiaryListView()
{
ArrayAdapter<Diary> diaryAdapter = new MyDiaryAdapter();
listDiary = (ListView) findViewById(R.id.diaryListView);
listDiary.setAdapter(diaryAdapter);
}
private class MyListAdapter extends ArrayAdapter<Treatment>
{
public MyListAdapter()
{
super(TreatmentList.this, R.layout.treatment_view, treatments);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = convertView;
if(itemView == null)
{
itemView = getLayoutInflater().inflate(R.layout.treatment_view, parent, false);
}
Treatment currentTreatment = treatments.get(position);
TextView textMake = (TextView)itemView.findViewById(R.id.txtMake);
textMake.setText(currentTreatment.getName());
TextView textStarted = (TextView)itemView.findViewById(R.id.textStarted);
TextView textMethod = (TextView)itemView.findViewById(R.id.textMethod);
return itemView;
}
}
private class MyDiaryAdapter extends ArrayAdapter<Diary>
{
public MyDiaryAdapter()
{
super(TreatmentList.this, R.layout.diary_view, notes);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = convertView;
if(itemView == null)
{
itemView = getLayoutInflater().inflate(R.layout.diary_view, parent, false);
}
Diary currentNote = notes.get(position);
TextView textMake = (TextView)itemView.findViewById(R.id.txtMake);
textMake.setText(currentNote.getTitle());
return itemView;
}
}
편집 : 여기 "노트"가 채워집니다.
private void filldiaryList(Treatment treatment)
{
notes = dbDiary.findDiaryNotes(treatment);
}
은 Heres는 첫 번째 목록의 OnClick은 처리 방법 :
private void registerClickCallback() {
list = (ListView)findViewById(R.id.treatmentsListView);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id)
{
Treatment clickedTreatment = treatments.get(position);
loadDiaryList(clickedTreatment);
}
});
}
편집 2 : 전체 파일 :
public class TreatmentList extends Activity
{
private ListView list, listDiary;
private List<Treatment> treatments;
private List<Diary> notes;
private DbHandlerTreatments db;
private DbHandlerDiary dbDiary;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
db = new DbHandlerTreatments(this);
dbDiary = new DbHandlerDiary(this);
loadTreatmentList();
}
private void registerClickCallback() {
list = (ListView)findViewById(R.id.treatmentsListView);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id)
{
Treatment clickedTreatment = treatments.get(position);
loadDiaryList(clickedTreatment);
}
});
}
private void registerDiaryClickCallback() {
listDiary = (ListView)findViewById(R.id.diaryListView);
listDiary.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id)
{
Diary note = notes.get(position);
System.out.println(note.getTitle());
}
});
}
private void fillTreatmentList()
{
treatments = db.findAllTreatments();
}
private void filldiaryList(Treatment treatment)
{
notes = dbDiary.findDiaryNotes(treatment);
}
private void loadTreatmentList()
{
setContentView(R.layout.treatments);
fillTreatmentList();
fillListView();
registerClickCallback();
}
private void loadDiaryList(Treatment treatment)
{
setContentView(R.layout.diaries);
filldiaryList(treatment);
fillDiaryListView();
registerDiaryClickCallback();
}
private void fillListView()
{
ArrayAdapter<Treatment> adapter = new MyListAdapter();
list = (ListView) findViewById(R.id.treatmentsListView);
list.setAdapter(adapter);
}
private void fillDiaryListView()
{
ArrayAdapter<Diary> diaryAdapter = new MyDiaryAdapter();
listDiary = (ListView) findViewById(R.id.diaryListView);
listDiary.setAdapter(diaryAdapter);
}
private class MyListAdapter extends ArrayAdapter<Treatment>
{
public MyListAdapter()
{
super(TreatmentList.this, R.layout.treatment_view, treatments);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = convertView;
if(itemView == null)
{
itemView = getLayoutInflater().inflate(R.layout.treatment_view, parent, false);
}
Treatment currentTreatment = treatments.get(position);
TextView textMake = (TextView)itemView.findViewById(R.id.txtMake);
textMake.setText(currentTreatment.getName());
TextView textStarted = (TextView)itemView.findViewById(R.id.textStarted);
TextView textMethod = (TextView)itemView.findViewById(R.id.textMethod);
return itemView;
}
}
private class MyDiaryAdapter extends ArrayAdapter<Diary>
{
public MyDiaryAdapter()
{
super(TreatmentList.this, R.layout.diary_view, notes);
listDiary.invalidateViews();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = convertView;
if(itemView == null)
{
itemView = getLayoutInflater().inflate(R.layout.diary_view, parent, false);
}
Diary currentNote = notes.get(position);
TextView textMake = (TextView)itemView.findViewById(R.id.txtMake);
textMake.setText(currentNote.getTitle());
return itemView;
}
}
"메모"는 어디에 채워 집니까? 그리고 첫 번째 목록에 대해 "onItemClickListener"메서드를 어디에 처리합니까? 이와 관련하여 더 많은 코드를 추가해야합니다. – JML
@JML 정보로 내 질문을 업데이트했습니다. – themanwithballs