2016-10-24 13 views
0

Ich möchte eine versteckte Schaltfläche zeigen, wenn Benutzer irgendein Wort auf Edittext setzen. im Versuch bereits diese Methode:set button Sichtbar/unsichtbar in Textwatcher in android

((Button)findViewById(R.id.btnClear)).setVisibility(View.VISIBLE); 

dies ist mein Code in TextWatcher:

final EditText txtSearch = (EditText)findViewById(R.id.txtSearch); 
txtSearch.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) { 
     ((Button)findViewById(R.id.btnClear)).setVisibility(View.VISIBLE); 
     CategoryCustomAdapter adapter2 = 
       new CategoryCustomAdapter(showCategoryListActivity.this, 
         DatabaseHelper.getCategories(
           showCategoryListActivity.this,s.toString())); 
     ((ListView)findViewById(R.id.lstCategorylist)).setAdapter(adapter2); 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 
}); 

alles, was Arbeit in Ordnung, außer dieser Linie:

((Button)findViewById(R.id.btnClear)).setVisibility(View.VISIBLE); 

ich bin sicher, dass Sie helfen können ich raus. PS: API 19 Nexus 4 Android 4.4.2

+0

können Sie Ihre Taste, bevor zuweisen? Persönlich werde ich den Code in AfterTextChanged setzen. Dann kannst du btnClear.setvisibility setzen (count> 0? VISIBLE: GONE); – JCDecary

+0

Ich fürchte, das ist nicht die Lösung. aber ich habe alles getan, was du gesagt hast, und nichts ist passiert. (erzwinge das Schließen am Anfang) –

+0

Kannst du die Logcat-Logs hier posten, wenn du eine Macht nahesteht? Wie können Sie sagen, alles funktioniert gut außer dieser Linie? Der einzige Grund, den ich denke, ist, dass Sie mit Ihrem "R.id.btnClear" Namen falsch sind. –

Antwort

0

Deklarieren Sie Variable früher wie diese -in Oncreate.

Button howtoButton = (Button) view.findViewById(R.id.howtobutton); 

als es verwenden, wie diese

howtoButton.setVisibility(View.VISIBLE) 
howtoButton.setVisibility(View.GONE) 
+0

Ich habe das aber einige, wie dieser Fehler passiert ist: –

+0

Sie müssen feststellen, ob Sie mit ImageButton oder normalen Button das sind unterschiedlich, weshalb Sie einen Fehler erhalten. Einer ist Cast ImageButton buttonname = (ImageButton) view.findViewById (R.id.ofbutton) und der andere ist Button ohne den Image-Teil. Folgen Sie, was in Ihrem XML ist. @ PedramHassas – skryshtafovych

+0

danke für den Tipp mein schlechtes tut mir leid –

0

schließlich es herausfinden.
logs sagen:

Image android.support.v7.widget.AppCompat kann android.widget nicht gegossen werden. Knopf

Änderung dieser auf onCreate():

final Button btnClear = (Button)findViewById(R.id.btnClear); 

dazu:

final ImageButton btnClear = (ImageButton)findViewById(R.id.btnClear); 

ich weiß nicht, warum, aber ich einige Hintergrundinformationen für meinen Knopf verwenden und einige, wie es stellt sich zu ImageButton und btnClear.setVisibility(View.VISIBLE); funktioniert gut in public void onTextChanged(CharSequence s, int start, int before, int count)

public class showCategoryListActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_show_category_list); 

     final ListView lstCategory = (ListView) findViewById(R.id.lstCategorylist); 
     final ImageButton btnClear = (ImageButton)findViewById(R.id.btnClear); 
     final EditText txtSearch = (EditText)findViewById(R.id.txtSearch); 

     CategoryCustomAdapter adapter = 
       new CategoryCustomAdapter(this,DatabaseHelper.getCategories(
         this,((TextView)findViewById(R.id.txtSearch)).getText().toString())); 
     lstCategory.setAdapter(adapter); 

     txtSearch.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) { 
       btnClear.setVisibility(View.VISIBLE); 
       CategoryCustomAdapter adapter2 = 
         new CategoryCustomAdapter(showCategoryListActivity.this, 
           DatabaseHelper.getCategories(
             showCategoryListActivity.this,s.toString())); 
       ((ListView)findViewById(R.id.lstCategorylist)).setAdapter(adapter2); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 
     txtSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
      @Override 
      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
       if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
        CategoryCustomAdapter adapter = new CategoryCustomAdapter(
          showCategoryListActivity.this, 
          DatabaseHelper.getCategories(
            showCategoryListActivity.this, 
            ((TextView)findViewById(R.id.txtSearch)).getText().toString())); 
        ((ListView)findViewById(R.id.lstCategorylist)).setAdapter(adapter); 
        return true; 
       } 
       return false; 
      } 
      }); 
    } 


    public void btn_clear_clicked(View view) { 
     ((TextView)findViewById(R.id.txtSearch)).setText(""); 
     CategoryCustomAdapter adapter = new CategoryCustomAdapter(
       showCategoryListActivity.this, 
       DatabaseHelper.getCategories(
         showCategoryListActivity.this, 
         ((TextView)findViewById(R.id.txtSearch)).getText().toString() 
       ) 
     ); 
     ((ListView)findViewById(R.id.lstCategorylist)).setAdapter(adapter); 
    } 

} 

XML für Button:

<ImageButton 
 
     android:id="@+id/btnClear" 
 
     android:layout_width="25dp" 
 
     android:layout_height="25dp" 
 
     android:text="Button" 
 
     android:layout_marginLeft="5dp" 
 
     android:layout_marginRight="5dp" 
 
     android:background="@android:drawable/ic_menu_close_clear_cancel" 
 
     android:layout_marginTop="11dp" 
 
     android:layout_alignParentTop="true" 
 
     android:layout_alignParentEnd="true" 
 
     android:onClick="btn_clear_clicked (showCategoryListActivity)" 
 
     android:visibility="invisible" 
 
     android:elevation="0dp" />

Sorry für meine Unachtsamkeit

+0

Ein guter Start, eine Antwort zu posten, sobald Sie das Problem gelöst haben. Ein paar andere Probleme mit Ihrer Codebasis. 1. Erstellen Sie niemals einen neuen Adapter im Listener. Erstellen Sie eine Methode, mit der die von Adapter verwendeten Daten aktualisiert werden. 2. Stellen Sie Adapter außerhalb des Klick-Listeners auf ListView ein. 3. Nur die Code-Initialisierung muss in OnCreate passieren, für den Rest der Sachen verwenden Sie onStart. –