是否有更简单的方法来获得我想在这里实现的目标?

时间:2017-03-27 00:31:32

标签: android

我制作了一个显示某些产品信息的应用程序,我通过在主要活动中将品牌放在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");


    }

}

现在我的问题是,是否有更简单的方法来实现这一目标?而不是为每个模型和设置吨意图设置一个类?

2 个答案:

答案 0 :(得分:1)

因此,对于所有项目,您都有共同的元素(Displacement,weight,topSpeed等)。您可以使用Bundle类。

这很容易。

  1. 制作捆绑包的实例

    Bundle bundle = new Bundle();

  2. 然后在捆绑上,只需放置您喜欢的任何物品。例如,如果你想放一个arraylist,

  3. bundle.putIntArray(arrayKey, int[]);

    注意:密钥就在那里,以便下一个活动可以识别捆绑中您想要的项目。

    1. 当然,把捆绑放在你的意图上。

      intent.putExtra(bundleKey, bundle);

    2. 下一个活动中,获取意图,然后获取您的包。

      Bundle bundle = getIntent().getExtras().getBundle(bundleKey);

    3. 从捆绑中提取你的arraylist。

      int yourArrayList[] = bundle.getIntArray(arrayKey);

    4. 你们全部完成了!

答案 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来获取数据。

注意:如果要编辑和保存自行车信息,数据库将非常有用。