- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个包含 ListView
的应用程序,长按 ListView
中的任何项目将弹出一个 AlertDialog
自定义 View
将为用户提供更多选项。现在,自定义 View
中有一个 TextView
,它显示项目,已被用户长按。但是,当我第二次长按 ListView
中的任何项目时出现问题。
让我用一个例子清楚地解释这一点-
假设,列表中有四项 -
假设用户在 Activity
加载后(第一次)长按了“数学”。结果,AlertDialog
弹出,TextView
显示“English”。
现在,在用户关闭之前的对话框并再次长按“地理”之后。结果,AlertDialog
再次弹出,TextView
显示“English”!然而,它应该显示“地理”。
这是我正在使用的代码 -
Add_Topics.java
:
package com.Swap.StudyBuddy;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class Add_Topics extends Activity {
AddTopics_MenuAdapter adapter;
ListView topics_list;
ArrayList<Topic> the_subjects = new ArrayList<Topic>();
String new_subject;
SubjectsDatabase sd = new SubjectsDatabase(this);
EditText tpc_nm;
InputMethodManager imm;
ImageView list_bg;
ImageView bg_shadow;
TextView itemTitle;
int whereArgs2;
View dialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add__topics);
topics_list = (ListView) findViewById(R.id.topics_list);
topics_list.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
whereArgs2 = arg2;
showDialog(1);
return false;
}
});
sd.getWritableDatabase();
the_subjects = sd.getTopics();
overridePendingTransition(R.anim.reverse_in_left, R.anim.reverse_out_left);
Animation enter = AnimationUtils.loadAnimation(getBaseContext(), R.anim.upcoming_menu);
Animation enter_slow = AnimationUtils.loadAnimation(getBaseContext(), R.anim.enter_l2r_slide);
TextView des = (TextView)findViewById(R.id.des_at);
TextView title = (TextView)findViewById(R.id.title_at);
Button add_topic = (Button)findViewById(R.id.add_topic_button);
Typeface roboto_lt = Typeface.createFromAsset(getAssets(), "Roboto-Light.ttf");
des.setTypeface(roboto_lt);
title.setTypeface(roboto_lt);
add_topic.setTypeface(roboto_lt);
title.startAnimation(enter);
des.startAnimation(enter_slow);
adapter = new AddTopics_MenuAdapter(this, the_subjects);
topics_list.setAdapter(adapter);
backgroundChanges();
}
public void onClickAddTopic(View v) {
showDialog(0);
tpc_nm.requestFocus();
getBaseContext();
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
protected Dialog onCreateDialog(int id) {
switch(id) {
case 0:
tpc_nm = new EditText(this);
tpc_nm.setHint("New Topic/Subject Name");
Typeface roboto_lt = Typeface.createFromAsset(getAssets(), "Roboto-Light.ttf");
tpc_nm.setTypeface(roboto_lt);
Builder bld = new AlertDialog.Builder(this);
bld.setIcon(R.drawable.ic_launcher);
bld.setTitle("Add Topic/Subject");
bld.setView(tpc_nm);
bld.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButon) {
String new_topic_name = tpc_nm.getText().toString();
new_subject = new_topic_name;
adapter = null;
the_subjects.add(new Topic(new_topic_name));
sd.addTopic(new Topic(new_topic_name));
sd.close();
adapter = new AddTopics_MenuAdapter(getBaseContext(), the_subjects);
imm.toggleSoftInput(InputMethodManager.RESULT_HIDDEN, 0);
tpc_nm.setText("");
backgroundChanges();
adapter.notifyDataSetChanged();
}
});
bld.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
imm.toggleSoftInput(InputMethodManager.RESULT_HIDDEN, 0);
tpc_nm.setText("");
backgroundChanges();
}
});
return bld.create();
case 1:
String item = the_subjects.get(whereArgs2).getTopic();
final Builder build = new AlertDialog.Builder(this);
LayoutInflater li = this.getLayoutInflater();
dialog = li.inflate(R.layout.topics_dialog, null);
itemTitle = (TextView) dialog.findViewById(R.id.itemTitle);
itemTitle.setText(item);
Toast.makeText(getBaseContext(), String.valueOf(whereArgs2) , Toast.LENGTH_SHORT).show();
build.setView(dialog);
return build.create();
case 2:
final EditText edited_topic_name = new EditText(this);
Typeface roboto_light = Typeface.createFromAsset(getAssets(), "Roboto-Light.ttf");
edited_topic_name.setTypeface(roboto_light);
edited_topic_name.setHint("New Topic Name");
Builder bld1 = new AlertDialog.Builder(this);
bld1.setView(edited_topic_name);
bld1.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
sd.getWritableDatabase();
sd.updateTopic(new Topic(edited_topic_name.getText().toString()));
sd.close();
the_subjects.clear();
adapter = null;
the_subjects = sd.getTopics();
adapter = new AddTopics_MenuAdapter(getBaseContext(), the_subjects);
edited_topic_name.setText("");
adapter.notifyDataSetChanged();
}
});
bld1.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
edited_topic_name.setText("");
}
});
}
return null;
}
/*public void onPause() {
super.onPause();
the_subjects.clear();
}
public void onStop() {
super.onStop();
the_subjects.clear();
}
public void onDestroy() {
super.onDestroy();
the_subjects.clear();
} */
public void backgroundChanges() {
list_bg = (ImageView) findViewById(R.id.list_bg);
bg_shadow = (ImageView) findViewById(R.id.bg_shadow);
int topic_list_length = the_subjects.size();
switch(topic_list_length) {
case 0:
break;
default:
list_bg.setImageResource(R.drawable.round);
bg_shadow.setImageResource(R.drawable.shadow);
}
}
public void onClickRemove(View v) {
sd.getWritableDatabase();
sd.removeTopic(new Topic(the_subjects.get(whereArgs2).toString()));
adapter = null;
the_subjects = null;
the_subjects = sd.getTopics();
sd.close();
adapter = new AddTopics_MenuAdapter(this, the_subjects);
dismissDialog(1);
adapter.notifyDataSetChanged();
topics_list.setAdapter(adapter);
}
public void onClickEdit(View v) {
showDialog(2);
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_add__topics, menu);
return true;
}
}
AddTopics_MenuAdapter.java
:
package com.Swap.StudyBuddy;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class AddTopics_MenuAdapter extends ArrayAdapter<Topic> {
private final Context context;
final ArrayList<Topic> topics;
public AddTopics_MenuAdapter(Context context, ArrayList<Topic> topics) {
super(context, R.layout.add_topics_menu, topics);
this.context = context;
this.topics = topics;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View topicsView = inflater.inflate(R.layout.add_topics_menu, parent, false);
final TextView topic_name = (TextView) topicsView.findViewById(R.id.topic_title);
Typeface rbt_lt = Typeface.createFromAsset(getContext().getAssets(), "Roboto-Light.ttf");
Animation enter = AnimationUtils.loadAnimation(getContext(), R.anim.upcoming_menu_fast);
Topic topic = topics.get(position);
topic_name.setText(topic.getTopic());
topic_name.setTypeface(rbt_lt);
topic_name.setAnimation(enter);
return topicsView;
}
}
SubjectsDatabase.java
:
package com.Swap.StudyBuddy;
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SubjectsDatabase extends SQLiteOpenHelper{
private static final String SUBJECT_ID = "id";
private static final String SUBJECT_NAME = "name";
private static final String DATABASE_NAME = "topicsDatabase";
private static final String TABLE_TOPICS = "topics";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE = "CREATE_TABLE" + TABLE_TOPICS + "(" +
SUBJECT_ID + "INTEGER_PRIMARY_KEY, " + SUBJECT_NAME + "TEXT" + ")";
public SubjectsDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(DATABASE_CREATE);
}
catch(SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXSISTS topics");
onCreate(db);
}
public void addTopic(Topic topic) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues topics = new ContentValues();
topics.put(SUBJECT_NAME, topic.getTopic());
db.insert(TABLE_TOPICS, null, topics);
db.close();
}
public void removeTopic(Topic topic) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_TOPICS, SUBJECT_ID + " = ?",
new String[] {String.valueOf(topic.get_id())});
db.close();
}
public ArrayList<Topic> getTopics(){
ArrayList<Topic> topics = new ArrayList<Topic>();
String selectQuery = "SELECT * FROM " + TABLE_TOPICS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cur = db.rawQuery(selectQuery, null);
if(cur.moveToFirst()) {
do {
Topic topic = new Topic();
topic.set_id(Integer.parseInt(cur.getString(0)));
topic.setTopic(cur.getString(1));
topics.add(topic);
} while(cur.moveToNext());
}
db.close();
return topics;
}
public void updateTopic(Topic topic_name) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues topic = new ContentValues();
topic.put(SUBJECT_NAME, topic_name.getTopic());
db.update(TABLE_TOPICS, topic, SUBJECT_ID + " = ?",
new String[] {String.valueOf(topic_name.get_id())});
db.close();
}
}
主题.java
package com.Swap.StudyBuddy;
public class Topic {
String Topic;
int _id;
public int get_id() {
return _id;
}
public void set_id(int _id) {
this._id = _id;
}
public Topic() {
}
public Topic(int id, String topic) {
this._id = id;
this.Topic = topic;
}
public Topic(String topic) {
this.Topic = topic;
}
public String getTopic() {
return Topic;
}
public void setTopic(String topic) {
Topic = topic;
}
}
请帮我解决这个问题。提前致谢!!
最佳答案
onCreateDialog创建和缓存对话框。第二次调用 showDialog只是重新显示原始缓存对话框。您需要覆盖 onPrepareDialog如果您想在显示之前修改对话框内容。
关于Android - 关闭 AlertDialog 后清除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612225/
我正在尝试在 AlertDialog 中创建一个 AlertDialog,但是当我运行代码时,没有出现第二个 AlertDialog 这是我的代码,我想让它像如果用户在第一个 AlertDialog
相关问题是here 制作android应用,我觉得我的代码不酷。 因为,每当需要对话框时我都会创建新的 AlderDialog.Builder 以防止出现此错误 “指定的子项已有父项。您必须先对子项的
我正在使用以下代码来创建警报对话框。 AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(thi
我正在尝试在警报对话框中添加一个警报对话框。但是看不到第二个警报对话框。请帮助我这是我显示的代码 AlertDialog alertDialog = new AlertDialog.Builder(m
为什么要使用 AlertDialog.Builder 类而不是 AlertDialog 直接可用的方法,例如,为什么使用 AlertDialog.Builder.setCancellable 而不是
假设您有一个带有两个按钮 A 和 B 的 AlertDialog。我发现在某些设备和某些版本的 android 上,如果您触摸对话框周围屏幕的任何区域,AlertDialog 消失。在其他设备上,您被
我目前正在使用需要使用大量 AlertDialogs 的应用程序。我目前在这里编写了一个基本的代码: protected void StopButton () { AlertDialog.Bu
我正在开发一个 Android 应用程序,并且我有一个 AlertDialog 子类。我想在对话框标题区域的右侧放置 2 个 ImageButtons(类似于 Activity 中的 ActionBa
我一直在尝试在 AlertDialog 中制作一个按钮Flutter 中的盒子。但我找不到拉伸(stretch)按钮容器的方法。请检查我的代码并查看下面的示例图片。 AlertDialog(
我正在尝试找出创建对话框的最佳方式。我可以创建自己的 Dialog 类(对我来说,它更干净、更有条理),或者我可以使用 AlertDialog.Builder(可以内联完成,而且看起来很时髦)……两者
我使用 AlertDialog.builder 创建了一个对话框,其中显示了可以检查的多选项目列表。 我设置了初始的项目名称集及其检查状态: builder.setMultiChoiceItems(
应用拦截短信并显示消息的对话框。 但是我无法在我的 Test 类中解决我的 Dialog 错误。我做错了什么? (我还包含了我的其他 2 个文件)。 Eclipse 中显示错误:AlertDialog
我的 flutter 应用程序中出现了一个 Flutter AlertDiaog。使用 Flutter Driver,我无法点击 Flutter AlertDialog 或 AlertDialog 上
我是 Jetpack compose 的初学者。现在在我的应用程序屏幕中,AlertDialog 用于向用户显示一些信息。 根据文档,当用户在对话框外或后退按钮上单击时,将调用 onDismissRe
我有一个 AlertDialog 的自定义子类,它应该显示范围内所有可用 Wifi 网络的列表。 我通过创建该对话框的实例并调用 show() 来显示此对话框,并且我没有使用 AlertDialog.
我有一个 AlertDialog 的子类,它应该显示范围内所有可用 Wifi 网络的列表。 我希望对话框本身负责启动 Wifi 扫描并接收结果。 出于这个原因,我不能使用 AlertDialog.Bu
标题几乎说明了一切。我需要关于如何做到这一点的建议。我可能只是将外部适配器添加为 AlertDialog 上的 View,以使其不那么复杂,但我仍然不知道如何与 交互来自内部适配器的 AlertDia
我想自定义 V7 AlertDialog 的 TITLE 颜色。 SetCustomTitle() 似乎无法与 android.support.v7.app.AlertDialog 一起使用。我可以看
创建 AlertDialog 然后显示和显示 AlertDialog.Builder 本身之间的主要区别是什么? 例如。我可以有一个像这样的 AlertDialog.Builder: AlertDi
关于我们什么时候应该使用 android.app.AlertDialog,或者我们什么时候应该使用 android.support.v7.app.AlertDialog,是否有任何指南? 因为,如果我
我是一名优秀的程序员,十分优秀!