我制作了一个小应用,它是一本字典。当使用吐司从列表中选择一个单词时,它将弹出含义。我添加了一项功能,该功能将允许用户添加新单词及其定义,但无法正常工作。 以下是代码:
public class MainActivity extends AppCompatActivity {
private String[] words = {
"Ankit Rath","Mediocre","Idiot","Legend"
};
private String[] defn = {
"Creator of this App!","Android Development","Developer","Ankit Rath"
};
private String d="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
run();
}
**public void run(){
ListView list = (ListView) findViewById(R.id.li);
ArrayAdapter<String> adap = new ArrayAdapter<>(
this,
android.R.layout.simple_list_item_1,
words
);
list.setAdapter(adap);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String de = defn[i];
Toast.makeText(getApplicationContext(),de,Toast.LENGTH_SHORT).show();
}
});
}**
**public void add(View view) {
EditText txtw = (EditText) findViewById(R.id.t1);
String ndef = txtw.getText().toString();
defn[defn.length] = ndef;
EditText txtd = (EditText) findViewById(R.id.t2);
String nword = txtd.getText().toString();
words[words.length] = nword;
run();
}**
public void reset1(View view) {
EditText t1 = (EditText) findViewById(R.id.t1);
t1.setText("");
}
public void reset2(View view) {
EditText t2 = (EditText) findViewById(R.id.t2);
t2.setText("");
}
}
我希望所有这些都足以找到解决方案。请帮忙。
答案 0 :(得分:0)
defn[defn.length] = ndef;
将导致ArrayIndexOutOfBoundsException
,因为您正尝试访问超出数组大小的索引。
您应该改用List
。
类似地,将List
使用words
。
接下来,您不需要在每次数据更改时都创建新的ListView
或Adapter
。只需使用adap.notifyDataSetChanged()
。
您的程序应为:
public class MainActivity extends AppCompatActivity {
private List<String> words;
private List<String> defn;
private String d="";
ListView list;
ArrayAdapter<String> adap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
words = new ArrayList<>();
words.add("Ankit Rath");
words.add("Mediocre");
words.add("Idiot");
words.add("Legend");
defn = new ArrayList<>();
defn.add("Creator of this App!");
defn.add("Android Development");
defn.add("Developer");
defn.add("Ankit Rath");
run();
}
public void run(){
list = (ListView) findViewById(R.id.li);
adap = new ArrayAdapter<>(
this,
android.R.layout.simple_list_item_1,
words
);
list.setAdapter(adap);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String de = defn.get(i);
Toast.makeText( getApplicationContext(),de,Toast.LENGTH_SHORT).show();
}
});
}
public void add(View view) {
EditText txtw = (EditText) findViewById(R.id.t1);
String ndef = txtw.getText().toString();
defn.add(ndef);
EditText txtd = (EditText) findViewById(R.id.t2);
String nword = txtd.getText().toString();
words.add(nword);
adap.notifyDataSetChanged();
}
public void reset1(View view) {
EditText t1 = (EditText) findViewById(R.id.t1);
t1.setText("");
}
public void reset2(View view) {
EditText t2 = (EditText) findViewById(R.id.t2);
t2.setText("");
}
}
答案 1 :(得分:0)
public class MainActivity extends AppCompatActivity {
private ArrayList<String> words=new ArrayList<String>();
private ArrayList<String> defn=new ArrayList<String>();
/*private String[] words = {
"Ankit Rath","Mediocre","Idiot","Legend"
};*/
/*private String[] defn = {
"Creator of this App!","Android Development","Developer","Ankit Rath"
};*/
private String d="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
words.add("Ankit Rath");
words.add("Mediocre");
words.add("Idiot");
words.add("Legend");
defn.add("Creator of this App!");
defn.add("Android Development");
defn.add("Developer");
defn.add("Ankit Rath");
run();
}
public void run(){
ListView list = (ListView) findViewById(R.id.li);
ArrayAdapter<String> adap = new ArrayAdapter<>(
this,
android.R.layout.simple_list_item_1,
words
);
list.setAdapter(adap);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String de = defn.get(i);
Toast.makeText(getApplicationContext(),de,Toast.LENGTH_SHORT).show();
}
});
}
public void add(View view) {
EditText txtw = (EditText) findViewById(R.id.t1);
String ndef = txtw.getText().toString();
defn.add(ndef);
EditText txtd = (EditText) findViewById(R.id.t2);
String nword = txtd.getText().toString();
words.add(nword);
run();
}
public void reset1(View view) {
EditText t1 = (EditText) findViewById(R.id.t1);
t1.setText("");
}
public void reset2(View view) {
EditText t2 = (EditText) findViewById(R.id.t2);
t2.setText("");
}
}
使用数组列表,以便您可以在运行时添加项目。如上更改代码。 您不能将项目添加到简单数组中,因为它的大小在编译时是固定的,您不能在运行时将新项目添加到数组中。