0

只要有ListViewEditText是很難搞清楚,我試過另一種解決方案:一個ListViewTextViews,當你點擊一個,我趕上聚焦TextView向監聽器(父ListView一個OnItemClickListener)和我開一個AlertDialog如何從AlertDialog中更改值?

ISSUE:當我按下了AlertDialog OK按鈕,我想聚焦TextView得到的警告對話框中的EditText的文本值,但它不工作,他保持相同的文本值。 On activity:

 listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> a, View v, int pos, long id){ 

      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 

      id ++; 
      t = new TextView(activity); 
      t = (TextView) v; 

      AlertDialog.Builder alert = new AlertDialog.Builder(activity); 

      alert.setTitle("Title"); 
      alert.setMessage("Message"); 

      // Set an EditText view to get user input 
      final EditText input = new EditText(activity); 
      input.setText(t.getText()); 
      alert.setView(input); 

      alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        //Changer la valeur dans la base et dans la liste 


        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS,0); 

        t.setText(input.getText()); 

        System.out.println("input avant : " + t.getText()); 
       } 
      }); 
      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        // Canceled. 
       } 
      }); 


      alert.show(); 
     } 
    }); 

我認爲這段代碼足以讓你知道我的代碼中有什麼問題。只是爲了讓你知道:

  • ListViewTextView)被聲明爲在活動類私有變量
  • 有一個Adapter類,如果我改變自動構建TextView列表
  • ListView偵聽器上的EditText的值,它可以工作,但在對話框警報偵聽器中,它不會。

詢問您是否需要更多信息。

回答

2

我不知道你是如何構建適配器的,所以我會猜測答案。您必須將文本放入適配器數據中(例如,在提供給適配器的ArrayList中),並在適配器上調用notifyDataSetChanged()

//ArrayList field on which your adapter is based ?!?(if you used this) 
private ArrayList<String> items; 

listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> a, final View v, int pos, long id){ 

      AlertDialog.Builder alert = new AlertDialog.Builder(activity); 

      alert.setTitle("Title"); 
      alert.setMessage("Message"); 
      final EditText input = new EditText(activity); 
      input.setText(t.getText()); 
      alert.setView(input); 

      alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        items.set(pos, input.getText().toString()); 
        adapterObject.notifyDataSetChanged(); // the adapter you set in the listView.setAdapter(); 
       } 
      }); 
      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        // Canceled. 
       } 
      }); 


      alert.show(); 
     } 
    }); 
+0

哦,我的天啊你的權利。這就像我做了一個自定義適配器,但不知道如何使用它。無論如何,我開始在Android上。謝謝 ! – 2012-03-08 06:41:58

+0

@SebastienFERRAND如果你想要的是一個'TextView'一個排了,你會用一個簡單的'ArrayAdapter '更好。自定義適配器適用於您想要自定義行佈局或具有更復雜的數據結構。 – Luksprog 2012-03-08 06:47:37

+0

是啊,你是對的,謝謝你的建議,但我需要它在未來更加複雜 – 2012-03-08 06:57:38