所有的textView都在AlertDialog之后的自定义列表适配器中修改



我用AsyncTask填充ArrayList <'HashMap <'String, String>>并使用我的自定义适配器设置适配器,并在getView()中创建每个视图。在此之前,一切正常。现在我在linear_layout上设置一个监听器,打开一个EditTextField的AlertDialog。当我想改变一个textView后必须点击,我的textView改变,当我上学,我回来了,开始值(我得到Asynctask)出现。就像如果值没有保存在。

这是我的getView()方法:
@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;
}

所以我不能"保存"AlertDialogTextField的值到位置,当我滚动时不要改变。我可以知道达到我的目的的正确方法是什么吗?

编辑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();                    
            }               
        }); 

最新更新