2015-05-23 4 views
1

Итак, я недавно начал работать с Android Studio, чтобы узнать, как глубоко развиваться Java/Android. Не так уж много хороших уроков/уроков, но мне удалось найти немало. Я получил предыдущий опыт программирования с C++/C#, поэтому схватить это было не так сложно, но он запутывается до того момента, когда я отправляю этот вопрос, на который я не мог найти ответ.Несколько событий onClick в Android Studio

activity_main.xml

<Button 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@string/add_button" 
android:id="@+id/btnAddItem" 
android:onClick="onAddItem" 
android:layout_alignParentBottom="true" 
android:layout_alignParentRight="true" 
android:layout_alignParentEnd="true" /> 

Так я получил свою кнопку установить там, и я уже получил действия, возложенные на него, который в основном на щелчок добавляет ж/е текст был написан рядом Это. ТЕПЕРЬ все, что я хочу сделать, это добавить тост-сообщение каждый раз, когда его нажимают, но если я это сделаю с настройкой onClickListener, он добавляет элемент один раз, не отображает тост, затем после попытки добавить еще один он просто отображает тост и ничего не делает. (Я могу продолжать делать тост заново).

бит, где я пытаюсь сделать тост работу долго с каждой кнопки "Добавить" щелчок на публичной ничтожной onAddItem (View v)

MainActivity.java

package com.example.norbis.webtutorial; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.PopupWindow; 
import android.widget.Toast; 

import org.apache.commons.io.FileUtils; 

import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 


public class MainActivity extends ActionBarActivity { 

    ArrayList<String> items; 
    ArrayAdapter<String> itemsAdapter; 
    ListView lvItems; 
    private Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     lvItems = (ListView) findViewById(R.id.lvItems); 
     items = new ArrayList<String>(); 
     readItems(); 
     itemsAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, items); 
     lvItems.setAdapter(itemsAdapter); 
     items.add("First item"); 
     items.add("Second Item"); 
     setupListViewListener(); 
    } 

    private void setupListViewListener() { 
     lvItems.setOnItemLongClickListener(
       new AdapterView.OnItemLongClickListener() { 
        @Override 
        public boolean onItemLongClick(AdapterView<?> adapter, 
                View item, int pos, long id) { 
         items.remove(pos); 
         itemsAdapter.notifyDataSetChanged(); 
         writeItems(); 
         return true; 
        } 
       }); 
    } 

    public void onAddItem(View v) { 
     EditText etNewItem = (EditText) findViewById(R.id.etNewItem); 
     String itemText = etNewItem.getText().toString(); 
     itemsAdapter.add(itemText); 
     etNewItem.setText(""); 
     writeItems(); 
     //Basically this is the bit where I tried to add the listener. 
     button = (Button)findViewById(R.id.btnAddItem); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getApplicationContext(), "Item added", Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 

    private void readItems() { 
     File filesDir = getFilesDir(); 
     File todoFile = new File(filesDir, "todo.txt"); 
     try { 
      items = new ArrayList<String>(FileUtils.readLines(todoFile)); 
     } catch (IOException e) { 
      items = new ArrayList<String>(); 
     } 
    } 

    public void writeItems() { 
     File filesDir = getFilesDir(); 
     File todoFile = new File(filesDir, "todo.txt"); 
     try { 
      FileUtils.writeLines(todoFile, items); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Я не включил ссылку на учебник, так как я сделал это некоторое время назад, и до сих пор делал это только для учебных целей, для которых это предназначалось.

EDIT: Это ответ на этот вопрос, и я просто сосать излишне усложняющие вещи. Я бы порекомендовал вам, ребята, но пока у меня недостаточно репутации, спасибо, что помогли мне.

ответ

0

Заменить это в коде:

button = (Button)findViewById(R.id.btnAddItem); 
button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getApplicationContext(), "Item added", Toast.LENGTH_LONG).show(); 
      } 
     }); 

только с:

Toast.makeText(getApplicationContext(), "Item added", Toast.LENGTH_LONG).show(); 

Причина: onAddItem(View) уже вызывался каждый раз, когда вы нажимаете на кнопку.

+0

Спасибо большое! Я понятия не имею, почему я слишком усложняю все это. Я должен был попробовать это раньше, но, вероятно, не сохранил/перезагрузил эмулятор genymotion, поэтому я думал, что это не сработало. Приветствия за это. – Norbis

+0

Рад, что это помогло! Если это правильный ответ для вас, отметьте его как правильно. – Karim

+1

Opps, забыл про это, сделано. реквизит для вас. =] – Norbis

0

onAddItem(View v) - это событие onClick, так почему вы устанавливаете другое? Это в основном ваш onClick, который вы обычно видите в View.OnClickListener, поэтому не устанавливайте другой, вместо этого просто показывайте тост. Установив новый, вы отменили свой старый, и все, что вы видели, это тост.

Toast.makeText(getApplicationContext(), "Item added", Toast.LENGTH_LONG).show(); 
1

Потому что вы изменили OnClickListener для кнопки, это постоянно :)

+0

Это единственный ответ на письмо, в котором объясняется, что прослушиватель кликов был изменен, а не новый. – ataulm

Смежные вопросы