android - Fill a listview from a different class android
问题描述
I want to fill and show a listview
of the prime numbers.The arraylist
of the PrimeNumbers class seems to be filled but when I want to assign it to the listview it won't work.
The problem is when the PrimeNumbersActivity is called from the handler the listview is not filled and nothing is showing in the new activity. Would really appreciate some help.
PrimeNumbers Class
public class PrimeNumbers {
public ArrayList<Integer> primeNumbers = new ArrayList<>();
public PrimeNumbers(ArrayList<Integer> primeNumbers){
this.primeNumbers = primeNumbers;
}
public PrimeNumbers() {
}
}
Handler class
public class MyHandler extends Handler {
ProgressDialog progressDialog;
Context context;
public MyHandler(ProgressDialog progressDialog, Context context) {
this.progressDialog = progressDialog;
this.context = context;
}
@Override
public void handleMessage(Message msg) {
findPrimeNumber(Integer.parseInt(msg.obj.toString()));
}
public void findPrimeNumber(int number){
ArrayList<Integer> primeNumbers = new ArrayList<>();
boolean isPrimeNumber;
PrimeNumbers primeNumbers1 = new PrimeNumbers(primeNumbers);
for(int i = 2; i <= number; i++){
isPrimeNumber = true;
for(int j = 1; j <= i; j++){
try {
sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(j != 1 && j != i){
if(i%j == 0){
isPrimeNumber = false;
break;
}
}
}
if(isPrimeNumber){
primeNumbers.add(i);
}
progressDialog.setProgress(i*100/number);
if(progressDialog.getProgress() == progressDialog.getMax()){
progressDialog.dismiss();
Intent intent = new Intent(context.getApplicationContext(),PrimeNumbersActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
for (int i :
primeNumbers1.primeNumbers) {
Log.d(TAG, i + "");
}
}
}
PrimeNumbersActivity class
public class PrimeNumbersActivity extends AppCompatActivity {
private PrimeNumbers primeNumbers = new PrimeNumbers();
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_prime_numbers);
listView = (ListView) findViewById(R.id.list1);
ArrayAdapter<Integer> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_2, primeNumbers.primeNumbers);
listView.setAdapter(arrayAdapter);
}
}
解决方案
You can try anyone,
1.use putExtra()
,
intent.putExtra("ARRAYLIST",(Serializable) primeNumbers);
In your activity, change this line
ArrayAdapter<Integer> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_2, (ArrayList<Integer>) getIntent().getSerializableExtra("ARRAYLIST"));
2.Use singleton class
public class PrimeNumbers {
private static PrimeNumbers primenumbersOBJ=new PrimeNumbers();
public ArrayList<Integer> primeNumbersArray = new ArrayList<>();
public static PrimeNumbers getInstance(){
return primenumbersOBJ;
}
private PrimeNumbers() {
}
In Handler class, before starting intent
PrimeNumbers.getInstance().primeNumbersArray=resultarray;
In your activity, use
PrimeNumbers.getInstance().primeNumbersArray
推荐阅读
- powershell - Powershell - 如何仅将 foreach 应用于从 T-SQL 查询返回的不同值
- asp.net-core - web api asp net core 中返回什么
- javascript - 贝宝智能按钮 | 如何隐藏 onApprove
- php - 为什么我的 PHP 不能从 HTML 表单中捕获数据
- hibernate - 如何使 Quarkus 服务器在其 DataSource 无法连接到数据库或即使数据库已关闭时启动
- java - JNDI(在 Logback.xml 中)
- android - Live App 无法将数据写入 Firebase 数据库
- windows - Snort 找不到规则类型激活
- javascript - JavaScript for 循环值未在循环内部更新
- kubernetes - k3s - 豆荚之间的网络不起作用