2016-11-19 2 views
0

Ich zeige eine Liste von Elementen auf der Aktivität und ich benutze ein ArrayAdapter, so dass ich nur eine TextView/EditText in meinem XML haben kann. Aber ich möchte in der Lage sein, den Text zu bearbeiten und irgendwie zu speichern. Gerade jetzt ... Ich kann nur bearbeiten, aber da ich keine Tasten habe, kann ich den Inhalt nicht speichern. Kann ich eine Zeile aus der Liste als nicht editierbar, aber anklickbar festlegen? Um die Aktion einer Schaltfläche zu simulieren?Machen Sie eine EditText Zeile anklickbar und nicht editierbar Android

<?xml version="1.0" encoding="utf-8"?> 
<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/my_edit_text" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:background="#035E7B" 
    /> 

Etwas wie:

Row1Editable

Row2Editable

Row3Editable

Clickhere Ihre Änderungen speichern

public class SingleListItem extends ListActivity { 
    SweetsXmlController controller; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_single_list_item); 
     controller = new SweetsXmlController(); 

     Intent intent = getIntent(); 
     int position = intent.getIntExtra("position", 1); 
     String[] mTestArray = getResources().getStringArray(R.array.sections); 
     Sweet toShow = controller.getSweetByPosition(position, mTestArray); 

     ArrayList<String> res = new ArrayList<>(); 
     res.add(toShow.getName()); 
     res.add("$" + toShow.getPrice()); 
     res.add(toShow.getDescription()); 
     res.add(toShow.getCalories() + "kcal");res.add("Click here to save your changes!"); 

     EditText editText = (EditText) findViewById(R.id.my_edit_text); 
     editText.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
       Log.d("HAAAAAAAAAAAAH", "Trying to MOVE TO NEXT ITEM "); 
      } 

      @Override 
      public void afterTextChanged(Editable editable) { 

      } 
     }); 

     ArrayAdapter<String> adapter; 
     adapter = new ArrayAdapter<String>(
       this, 
       R.layout.activity_single_list_item, 
       res); 
     setListAdapter(adapter); 



    } 

Antwort

0

Sie w Ich brauche einen eigenen Adapter dafür - siehe http://www.vogella.com/tutorials/AndroidListView/article.html. In der getView() - Methode des Adapters können Sie mit der EditText.setEnabled (boolean) -Methode festlegen, ob sie editierbar ist oder nicht.

Wenn Sie nur eine einzelne Schaltfläche benötigen, wäre es einfacher, eine separate Listenansicht + eine Schaltfläche in Ihrem Layout zu haben.

+0

Sie können sie nicht trennen, da ich mich lieber nicht mit einem benutzerdefinierten Adapter verkomplizieren möchte. – Mocktheduck

+0

Wenn Sie bestimmten Mitgliedern eines Listenansichts benutzerdefiniertes Verhalten hinzufügen möchten, benötigen Sie einen benutzerdefinierten Adapter. – rhari

0

Ich denke, diese Methode weiter unten verwenden:

EditText myEditTextField = new EditText(this); 

myEditTextField.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 
}); 

Nachdem der Text geändert, nur die Ausgabe in Textview speichern.

+0

Ich verstehe nicht, wie ich dies auf mein Problem anwenden würde – Mocktheduck

+0

Fügen Sie einfach TextChngedListener zu editTextField, und wann immer der Benutzer einige Inhalte im Text ändert, rufen Sie eine Funktion, die Benutzerdaten auf jeden Brief ändern speichert (oder Sie können CountDownTimer verwenden, um zu warten für 1 oder 2 Sekunden, um die Benutzerdaten zu speichern) – Swr7der

+0

Wie wird das Programm wissen, dass editText der ist, den ich in meiner Tätigkeit habe? Dadurch? – Mocktheduck

Verwandte Themen