Android: setText() 在设备上不起作用,但在带有键盘输入的模拟器上起作用
Android: setText() doesn't work on device, but on emulator with keyboard input
我正在 android 工作室制作一个简单的应用程序。
MainActivity 有一个 ListView,其中包含来自字符串数组的项目,
如果我单击一个项目,则会显示一个 AlterDialog。
该对话框有一个 EdixText。我在上面写文字,如果我单击肯定按钮,我单击的项目的 TextView 将更改为我刚写的内容。
抱歉我的英语不好...无论如何,这是我的 MainActivity 源代码。
package com.softdept.sangkyu.swex01;
import ...
public class SWEX01 extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swex01);
ListAdapter myAdapter = new MyAdapter(this, getResources().getStringArray(R.array.tvshow));
ListView tvShowList = (ListView)findViewById(R.id.listView);
tvShowList.setAdapter(myAdapter);
tvShowList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(final AdapterView<?> parent, View view, int position, long id) {
final TextView textView = (TextView)view.findViewById(R.id.textView);
String showName = textView.getText().toString();
Toast.makeText(parent.getContext(), showName, Toast.LENGTH_SHORT).show();
AlertDialog.Builder dialog = new AlertDialog.Builder(parent.getContext());
dialog.setTitle("Modify TV show");
dialog.setMessage(showName);
final EditText editText = new EditText(getApplicationContext());
dialog.setView(editText);
dialog.setNegativeButton("Cancel", null);
dialog.setPositiveButton("Modify", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String editShowName = editText.getText().toString();
textView.setText(editShowName);
Toast.makeText(parent.getContext(), "Modified!", Toast.LENGTH_SHORT).show();
}
});
dialog.show();
}
});
}
}
我 运行 这个应用程序和我的键盘输入模拟器运行良好。
然而,我也在我的 android 设备上 运行,当我点击按钮时,文本没有改变......
我的代码有什么问题??
这就是我更改几行代码后的工作方式。
final String[] items=getResources().getStringArray(R.array.tvshow);
//你可以继续使用ListAdapter。
final ArrayAdapter myAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,items);
//PositiveButton的onClick方法里面
items[position]=editShowName;
myAdapter.notifyDataSetChanged();
只要适配器的数据发生变化,您就需要调用 Adapter.notifyDataSetChanged()。
我正在 android 工作室制作一个简单的应用程序。 MainActivity 有一个 ListView,其中包含来自字符串数组的项目, 如果我单击一个项目,则会显示一个 AlterDialog。 该对话框有一个 EdixText。我在上面写文字,如果我单击肯定按钮,我单击的项目的 TextView 将更改为我刚写的内容。 抱歉我的英语不好...无论如何,这是我的 MainActivity 源代码。
package com.softdept.sangkyu.swex01;
import ...
public class SWEX01 extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swex01);
ListAdapter myAdapter = new MyAdapter(this, getResources().getStringArray(R.array.tvshow));
ListView tvShowList = (ListView)findViewById(R.id.listView);
tvShowList.setAdapter(myAdapter);
tvShowList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(final AdapterView<?> parent, View view, int position, long id) {
final TextView textView = (TextView)view.findViewById(R.id.textView);
String showName = textView.getText().toString();
Toast.makeText(parent.getContext(), showName, Toast.LENGTH_SHORT).show();
AlertDialog.Builder dialog = new AlertDialog.Builder(parent.getContext());
dialog.setTitle("Modify TV show");
dialog.setMessage(showName);
final EditText editText = new EditText(getApplicationContext());
dialog.setView(editText);
dialog.setNegativeButton("Cancel", null);
dialog.setPositiveButton("Modify", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String editShowName = editText.getText().toString();
textView.setText(editShowName);
Toast.makeText(parent.getContext(), "Modified!", Toast.LENGTH_SHORT).show();
}
});
dialog.show();
}
});
}
}
我 运行 这个应用程序和我的键盘输入模拟器运行良好。 然而,我也在我的 android 设备上 运行,当我点击按钮时,文本没有改变...... 我的代码有什么问题??
这就是我更改几行代码后的工作方式。
final String[] items=getResources().getStringArray(R.array.tvshow);
//你可以继续使用ListAdapter。
final ArrayAdapter myAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,items);
//PositiveButton的onClick方法里面
items[position]=editShowName;
myAdapter.notifyDataSetChanged();
只要适配器的数据发生变化,您就需要调用 Adapter.notifyDataSetChanged()。