Java Android Studio中的多个onClick事件
因此,我最近开始与Android Studio合作,希望学习一些深入的Java/Android开发。周围没有太多像样的教程/课程,但我设法找到了不少。我以前有过使用C++/C的编程经验,因此掌握这一点并不难,但它确实会让人困惑,以至于我在这里发布了这个我找不到答案的问题 活动\u main.xmlJava 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
<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,这是永久性的:)这是撰写本文时唯一一个解释单击侦听器已更改,而不是添加了新侦听器的答案。非常感谢!我不知道我为什么