이 맥락에서 다른 많은 게시물을 보았지만 아무도 도움이되지 않았습니다. 문제는 addField 버튼을 클릭하면 대화 상자 안의 listview가 새보기를 한 번만 추가한다는 것입니다. 그러나 다른 클릭에서는 어댑터가 올바르게 작동하지만 업데이트되지 않습니다 (getView가 호출되고 어댑터의 arrayList 크기도 변경됨을 의미합니다).
어댑터 클래스에서 notifyDataSetChanged ()를 사용했습니다. 결과가 없다! 활동에서 adpater 클래스의 인스턴스를 사용하고 myAdapter.notifyDataSetChanged ()를 호출했습니다. 결과가 없다!
내 코드는 다음과 같습니다.
public class MainActivity extends Activity {
ListView lvfid;
FieldAdapter fAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some code
showFid();
}
private void showFiD(){
final ArrayList <HashMap<String,String>> al = new ArrayList<HashMap<String,String>>();
final Dialog dialog = new Dialog(MainActivity.this , R.style.DialogTheme);
dialog.setContentView(R.layout.field_dialog);
dialog.setCancelable(true);
dialog.show();
Button addField = (Button) dialog.findViewById(R.id.btnfidField);
lvfid = (ListView) dialog.findViewById(R.id.lvfid);
//Another plan i have tested, but no result:
//fAdapter = new FieldAdapter(dialog.getContext(),al);
//lvfid.setAdapter(fAdapter);
addField.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
HashMap<String,String> h = new HashMap<String,String>();
h.put("name", "");
h.put("value", "");
al.add(h);
lvfid.setAdapter(new FieldAdapter(dialog.getContext(), al));
//fAdapter.notifyDataSetChanged();
}
});
}
public class FieldAdapter extends BaseAdapter{
private ArrayList <HashMap <String,String>> arrayList;
private LayoutInflater inflater;
public FieldAdapter(Context context, ArrayList<HashMap <String,String>> arrayList) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.arrayList = arrayList;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
View view = null;
if (convertView == null)
view = inflater.inflate(R.layout.field_inflater, null);
else
view = convertView;
Holder holder = new Holder();
holder.edName = (EditText) view.findViewById(R.id.edfidName);
holder.edValue = (EditText) view.findViewById(R.id.edfidValue);
//holder.edName.setText(arrayList.get(position).get("name"));
//holder.edValue.setText(arrayList.get(position).get("value"));
return view;
}
private class Holder {
private EditText edName;
private EditText edValue;
}
}
}
업데이트 : 모두 시간을내어 죄송합니다. 어리석은 문제는 내리스트 뷰가 스크롤 뷰 안에 있어서는 안된다는 것입니다! 나는 이것이 같은 문제를 가진 다른 사람들에게 도움이되기를 바랍니다!
시간을내어 미안 해요! 어리석은 문제는 내리스트 뷰가 스크롤 뷰 안에 있어서는 안된다는 것입니다! 목록보기를 scrollview에서 가져온 후 문제가 해결되었습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다