如何用意图启动某个类的特定实例?

问题描述:

我无法启动一个有意图的类的实例。如何用意图启动某个类的特定实例?

我的应用程序有一个初始屏幕,包含三个文字浏览“蛋糕,饮料和饼干”。在这些文字浏览中设置了onClick监听器,以便当用户点击“蛋糕”时,它会进入蛋糕列表(巧克力,柠檬,胡萝卜),并且用户点击“饮料”它将进入饮料列表(茶,咖啡,可乐)和饼干相同。目前,我的意图是启动一个Cakes类,并且在该类中有一个包含字符串(巧克力,柠檬,胡萝卜等)的arrayList,当用户点击Drinks时,它会启动一个名为Drinks的单独的类并执行相同的操作,与饼干同样。然而,我认为对于这三个类别只有一个类别,并且具有该类别的单独实例(使用不同的arrayLists来单独列出蛋糕,饮料和饼干)是更好的编码实践。我想我应该做一个'物品'类(即arrayList与巧克力,柠檬,胡萝卜,所有的饮料,和所有的饼干),但不知道如何启动'项目的具体实例'我的意图写在mainActivity中。任何帮助感谢!

其中初始三个项目中列出了mainActivity.java:

package com.example.android.recipe; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    TextView history = (TextView) findViewById(R.id.cakes); 
    history.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent cakesList = new Intent(MainActivity.this, cakeActivity.class); 
      startActivity(cakesList); 
     } 
    }); 

    TextView examination = (TextView) findViewById(R.id.drinks); 
    examination.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent drinksIntent = new Intent(MainActivity.this, drinksActivity.class); 
      startActivity(drinksIntent); 
     } 
    }); 

    TextView other = (TextView) findViewById(R.id.biscuits); 
    other.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent biscuitsIntent = new Intent(MainActivity.this, BiscuitsActivity.class); 
      startActivity(biscuitsIntent); 
     } 
    }); 

    } 
} 

这是“CakeActivity.java”当你点击“蛋糕”,这被推出,我想变成一个泛型类,当你点击蛋糕,咖啡或饼干时,它会启动,但它提供了相关的ArrayList。 NB我有一个名为'Record'的自定义ArrayAdapter,因为当我进一步开发这个应用程序时,点击巧克力,柠檬等将会有一个单独的配料列表来制作这个Cake(这些也将在未来不会是单独的类)。

package com.example.android.recipe; 

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.ListView; 

import java.util.ArrayList; 

public class cakeActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.record_list); 

     final ArrayList<Record> records = new ArrayList<Record>(); 

     records.add(new Record("Chocolate", ChocolateCake.class)); 
     records.add(new Record("Lemon", LemonCake.class)); 
     records.add(new Record("Ginger", GingerCake.class)); 

     RecordAdapter adapter = 
       new RecordAdapter(this, records, R.color.colorTan); 
     ListView listView = (ListView) findViewById(R.id.list); 
     listView.setAdapter(adapter); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Record record = records.get(position); 
       Intent intent = new Intent(getApplicationContext(), record.getListedItemId()); 
       startActivity(intent); 
      } 
      }); 



    } 
} 

NB这是典型的代码,而不是我的实际应用程序 - 我提到这一点,是因为我将有一个很长的列表,在其中我的代码正在编写方式,将需要的原因如果我继续以上述方式继续练习,则需要100个班级。

+0

使用Intent将数据(例如哪种类型的List)传递给下一个Activity,请参见[this post](https://*.com/questions/2091465/how-do-i-pass-data-between - 活动功能于Android的应用程序)。 – 0X0nosugar

Yyou可以使用意图额外的价值:

要做到这一点是将类型传递给在意向活动的最简单方法。

Intent intent = new Intent(getBaseContext(), AllInOneActivity.class); 
intent.putExtra("type", "cake"); 
startActivity(intent); 

访问,关于下一个活动

String type = getIntent().getStringExtra("type"); 

意图根据类型的负载数据:

final ArrayList<Record> records = new ArrayList<Record>(); 
if(type.equals("cake")) 
{ 
     records.add(new Record("Chocolate", ChocolateCake.class)); 
     records.add(new Record("Lemon", LemonCake.class)); 
     records.add(new Record("Ginger", GingerCake.class)); 
} 
else if(type.equals("Drinks")) 
{ 
records.add(new Record("fruty", whatever.class)); 
} 

试试这个,让我知道。如果问题持续存在。

+0

令人惊叹的是,非常感谢您的帮助。 –