私はこの文脈で他の多くの記事を見てきましたが、役に立たなかったのです。問題は、addFieldボタンをクリックすると、ダイアログ内のリストビューが新しいビューを1回追加するだけです。しかし、他のクリックでは更新されませんが、アダプタは正しく動作します(つまり、getViewが呼び出され、アダプタのarrayListのサイズが変更されたことを意味します)。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;
}
}
}
UPDATE: は私がみんなの時間がかかりましたごめんなさい。愚かな問題は、私のリストビューがスクロールビューの中にあってはいけないということでした!私はこれが同じ問題を抱えている人たちに役立つことを願っています
リストが更新されるたびにnotifyDataSetChanged()を使用します。 –
lvfid.setAdapterは一度だけ行うべきだと思います – user3793589