我用AsyncTask填充ArrayList <'HashMap <'String, String>>并使用我的自定义适配器设置适配器,并在getView()
中创建每个视图。在此之前,一切正常。现在我在linear_layout
上设置一个监听器,打开一个EditTextField的AlertDialog。当我想改变一个textView后必须点击,我的textView改变,当我上学,我回来了,开始值(我得到Asynctask)出现。就像如果值没有保存在。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
holder = new CustomListingCrossHolder();
convertView = m_inflater.inflate(R.layout.list_type_tournee, null);
holder.miscellaneous = (TextView) convertView.findViewById(R.id.miscellaneous);
holder.infos = (TextView) convertView.findViewById(R.id.infos);
holder.linear_divers = (LinearLayout) convertView.findViewById(R.id.test);
convertView.setTag(holder);
} else {
holder = (CustomListingCrossHolder) convertView.getTag();
}
holder.miscellaneous.setText(this.listItem.get(position).get("miscellaneous"));
holder.infos.setText(this.listItem.get(position).get("infos"));
holder.linear_divers.setOnClickListener(new View.OnClickListener()
{
View alertDialogView = m_inflater.inflate(R.layout.alert_dialog_divers, null);
public void onClick(View v)
{
CustomListingCrossHolder cmh = (CustomListingCrossHolder) v.getTag();
AlertDialog.Builder adb = new AlertDialog.Builder(ctx);
final EditText input = new EditText(ctx);
adb.setView(input);
adb.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int whichButton)
{
diver_edit = input.getText().toString();
holder.miscellaneous.setText(diver_edit);
// it's here where i change the textview
}
});
adb.setNegativeButton("CANCEL", null);
adb.create().show();
}
});
return convertView;
}
这是我的holder类:
private class CustomListingCrossHolder {
TextView infos;
TextView miscellaneous;
LinearLayout linear_divers;
}
所以我不能"保存"AlertDialog
的TextField
的值到位置,当我滚动时不要改变。我可以知道达到我的目的的正确方法是什么吗?
编辑1:我在我的Asynctask的OnPostExecute中调用我的listView这是我设置适配器的代码:
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
this.pDialog.dismiss();
Log.i("AsyncTaskListCrossingPoint", "onPostExecute");
JSONArray jArray = new JSONArray();
JSONObject json_data = null;
HashMap<String, String> map;
ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
if (!result.startsWith("error", 2)) {
// recuperation des donnees json
try {
jArray = new JSONArray(result);
} catch (JSONException e) {
Log.i("tagjsonexp", "" + e.toString());
} catch (ParseException e) {
Log.i("tagjsonpars", "" + e.toString());
}
Log.i("JARRAY", jArray.toString());
// Insertion des données json dans un Hashmap
for (int i = 0; i < jArray.length(); i++) {
try {
json_data = jArray.getJSONObject(i);
map = new HashMap<String, String>();
map.put("miscellaneous",json_data.getString("miscellaneous") != "null" ? json_data.getString("miscellaneous") : "Aucune");
map.put("infos",json_data.getString("infos") != "null" ? json_data.getString("infos") : "Aucune");
listItem.add(map);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.adapter = new CustomListingCrossAdapter(this.Mycontext, listItem);
listview.setAdapter(this.adapter);
}
}
顶部的代码是getView方法它在CustomListingCrossAdapter
final HashMap<String, String> object = (HashMap<String, String>) this.getItem(position);
以获取点击位置的项,我将具有相同名称键的新值放在我的HashMap中,如下所示:
holder.linear_divers.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
AlertDialog.Builder adb = new AlertDialog.Builder(ctx);
final EditText input = new EditText(ctx);
adb.setView(input);
adb.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int whichButton)
{
diver_edit = input.getText().toString();
object.put("miscellaneous", diver_edit);
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Log.i("objet", "o : " + object.get("miscellaneous"));
}
});
adb.setNegativeButton("CANCEL", null);
adb.create().show();
}
});