Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio中的多个onClick事件_Java_Android_Android Studio - Fatal编程技术网

Java Android Studio中的多个onClick事件

Java Android Studio中的多个onClick事件,java,android,android-studio,Java,Android,Android Studio,因此,我最近开始与Android Studio合作,希望学习一些深入的Java/Android开发。周围没有太多像样的教程/课程,但我设法找到了不少。我以前有过使用C++/C的编程经验,因此掌握这一点并不难,但它确实会让人困惑,以至于我在这里发布了这个我找不到答案的问题 活动\u main.xml <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@s

因此,我最近开始与Android Studio合作,希望学习一些深入的Java/Android开发。周围没有太多像样的教程/课程,但我设法找到了不少。我以前有过使用C++/C的编程经验,因此掌握这一点并不难,但它确实会让人困惑,以至于我在这里发布了这个我找不到答案的问题

活动\u 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" />

所以我在那里设置了我的按钮,我已经为它分配了一个动作,基本上是点击后添加的,文本写在它旁边。现在,我只想在每次单击时添加一条toast消息,但如果我使用设置onClickListener来执行此操作,它只会添加一次项目,而不会显示toast,然后在尝试添加另一条消息后,它只会显示toast,而不执行其他操作。(我可以继续做祝酒词,让它再次出现)

每次点击“添加”按钮,我都会尝试让烤面包片长时间工作,这一点是在添加项上的公共空白处(视图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);
    }
}
package com.example.norbis.webtutorial;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.PopupWindow;
导入android.widget.Toast;
导入org.apache.commons.io.FileUtils;
导入java.io.File;
导入java.io.IOException;
导入java.util.ArrayList;
公共类MainActivity扩展了ActionBarActivity{
数组列表项;
ArrayAdapter项Adapter;
列表视图项目;
私人按钮;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvItems=(ListView)findViewById(R.id.lvItems);
items=newarraylist();
readItems();
itemsAdapter=新阵列适配器(此,
android.R.layout.simple_list_item_1,items);
lvItems.setAdapter(itemsAdapter);
项目。添加(“第一项”);
项目。添加(“第二项”);
setupListViewListener();
}
私有void setupListViewListener(){
lvItems.setOnItemLongClickListener(
新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(适配器查看适配器,
查看项目,内部位置,长id){
项目。移除(pos);
itemsAdapter.notifyDataSetChanged();
writeItems();
返回true;
}
});
}
附加项上的公共无效(视图v){
EditText etNewItem=(EditText)findViewById(R.id.etNewItem);
String itemText=etNewItem.getText().toString();
itemsAdapter.add(itemText);
etNewItem.setText(“”);
writeItems();
//基本上,这就是我试图添加侦听器的地方。
按钮=(按钮)findViewById(R.id.btnAddItem);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(getApplicationContext(),“添加项”,Toast.LENGTH_LONG.show();
}
});
}
私有void readItems(){
File filesDir=getFilesDir();
File todoFile=新文件(filesDir,“todo.txt”);
试一试{
items=newarraylist(FileUtils.readLines(todoFile));
}捕获(IOE异常){
items=newarraylist();
}
}
公共无效书面文件(){
File filesDir=getFilesDir();
File todoFile=新文件(filesDir,“todo.txt”);
试一试{
FileUtils.writeLines(todoFile,items);
}
捕获(IOE异常){
e、 printStackTrace();
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
}
我没有像前一段时间那样包含到教程it self的链接,到目前为止,我只是出于学习目的而这样做的,这也是我的初衷

编辑:这个问题现在已经得到了回答,我只是不喜欢过于复杂的事情。我会投票给你们,但我还没有足够的声誉,谢谢你们帮我。onAddItem(View v)

是你们的onClick活动,所以你们为什么要设置另一个呢?这基本上就是您通常在
视图中看到的
onClick
。OnClickListener
所以不要设置另一个,只需显示土司即可。通过设置一个新的,您已经覆盖了旧的,您所看到的只是祝酒词

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

在代码中替换此选项:

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)
在您每次按下按钮时都会被调用。

因为您更改了按钮的OnClickListener,这是永久性的:)

这是撰写本文时唯一一个解释单击侦听器已更改,而不是添加了新侦听器的答案。非常感谢!我不知道我为什么