我制作了一个显示某些产品信息的应用程序,我通过在主要活动中将品牌放在arraylist中来实现这一点,然后在用户选择品牌后他可以选择特定型号,我通过制作一个全局的xml文件,以及每个模型的类,其中包含字符串和整数作为详细信息,现在的情况是,有可能有数百甚至上千个模型,是否有更简单的方法来实现这一目标?比如将所有数据放在一个类中并从中拉出来?还是会让事情变得更乱?
只是为了让你们知道我是一个初学者。
这是我的代码:
主要活动显示品牌列表:
package com.example.ofir.myapplication;
import android.content.Intent;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.example.ofir.myapplication.lists.bmwList;
import com.example.ofir.myapplication.lists.ktmList;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ArrayList<Brands> brands = new ArrayList<>();
brands.add(new Brands("KTM", ContextCompat.getColor(this, R.color.colorOrange)));
brands.add(new Brands("BMW", ContextCompat.getColor(this, R.color.colorPrimary)));
brands.add(new Brands("Suzuki", ContextCompat.getColor(this, R.color.colorPrimary)));
BrandAdapter itemsAdapter = new BrandAdapter(this, brands);
ListView listView = (ListView) findViewById(R.id.brandlist);
listView.setAdapter(itemsAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position == 0) {
Intent intent = new Intent(MainActivity.this, ktmList.class);
startActivity(intent);
}else if (position == 1) {
Intent intent2 = new Intent(MainActivity.this, bmwList.class);
startActivity(intent2);
}
}
});
}
}
每个品牌都打开了型号列表:
出于测试目的,我只设置了两个带有列表的品牌。
package com.example.ofir.myapplication.lists;
import com.example.ofir.myapplication.R;
import com.example.ofir.myapplication.models.dukeSmall;
import com.example.ofir.myapplication.models.smc;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import static android.media.CamcorderProfile.get;
public class ktmList extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.models_list);
final ArrayList<String> ktmlist = new ArrayList<String>();
ktmlist.add("Duke 125");
ktmlist.add("Duke 200");
ktmlist.add("Duke 390");
ktmlist.add("Duke 690");
ktmlist.add("RC 125");
ktmlist.add("RC 200");
ktmlist.add("RC 390");
ktmlist.add("RC8");
ktmlist.add("SMC-R 690");
ktmlist.add("SMR 990");
ktmlist.add("SuperDuke 990");
ktmlist.add("SuperDuke 1290");
final ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ktmlist);
ListView listView = (ListView) findViewById(R.id.models_list);
listView.setAdapter(itemsAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position == 0) {
Intent intent = new Intent(ktmList.this, dukeSmall.class);
startActivity(intent);
}else if (position == 8){
Intent intent = new Intent(ktmList.this, smc.class);
startActivity(intent);
}
}
});
}
}
然后我为每个模型及其规范提供了一个模型类,模型的一个例子是:
package com.example.ofir.myapplication.models;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.ofir.myapplication.R;
/**
* Created by Ofir on 23-Mar-17.
*/
public class smc extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.info_page);
int cc = 690;
int weight = 150;
int hp = 67;
int topspeed = 180;
ImageView logo = (ImageView) findViewById(R.id.logo_image);
logo.setImageResource(R.drawable.smc);
TextView Displacement = (TextView) findViewById(R.id.displacement_text);
Displacement.setText(cc + "cc");
TextView HP = (TextView) findViewById(R.id.hp_text);
HP.setText(""+hp);
TextView Weight = (TextView) findViewById(R.id.weight_text);
Weight.setText(""+weight);
TextView topSpeed = (TextView) findViewById(R.id.top_speed_text);
topSpeed.setText(topspeed + " km/h");
}
}
现在我的问题是,是否有更简单的方法来实现这一目标?而不是为每个模型和设置吨意图设置一个类?
答案 0 :(得分:1)
因此,对于所有项目,您都有共同的元素(Displacement,weight,topSpeed等)。您可以使用Bundle类。
这很容易。
制作捆绑包的实例
Bundle bundle = new Bundle();
然后在捆绑上,只需放置您喜欢的任何物品。例如,如果你想放一个arraylist,
bundle.putIntArray(arrayKey, int[]);
注意:密钥就在那里,以便下一个活动可以识别捆绑中您想要的项目。
当然,把捆绑放在你的意图上。
intent.putExtra(bundleKey, bundle);
在下一个活动中,获取意图,然后获取您的包。
Bundle bundle = getIntent().getExtras().getBundle(bundleKey);
从捆绑中提取你的arraylist。
int yourArrayList[] = bundle.getIntArray(arrayKey);
你们全部完成了!
答案 1 :(得分:0)
喜欢将所有数据放在一个类中并从中拉出来吗?
我建议您制作一个Bike.java
文件,其中包含有关单个Bike类型(速度,图像,CC,重量)的所有信息。
然后,您可以拥有Bike smc = new Bike(690, 150, 67, 180, R.drawable.smc)
。
您可以使用Intents将其加载到一个BikeDetailActivity.java
中。
并创建一个BikeAdapter.java
ArrayAdapter<Bike>
,这样当您点击任何项目时,您只需制作一个意图并传递必要的信息以显示在那里。
您还需要学习使用getIntent
来获取数据。
注意:如果要编辑和保存自行车信息,数据库将非常有用。