如何在类级别声明对象并获取意图数据?

时间:2016-07-06 11:47:35

标签: android android-intent arraylist

我正在尝试将ArrayList从一个活动转到另一个活动,然后将一些数据添加到列表中,然后再次传递它。 问题是,当我这样做时,我必须在课堂级别声明它,但后来我的问题是。在类级别声明时如何从意图中获取数据?

@Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.d(TAG, "Start onCreate Listan");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listan);
        Bundle listan = getIntent().getExtras();
        ArrayList<Produkt> lista = (ArrayList<Produkt>) getIntent().getSerializableExtra("list");
        if (lista.isEmpty()) {
            Log.d(TAG, "lista==null");
            ListProduktAdapter adapter = new ListProduktAdapter(Listan.this, lista);
            ListView listView = (ListView) findViewById(R.id.listView);
            Bundle produktInfo = getIntent().getExtras();
            String name = produktInfo.getString("name").toString();
            String allergen = produktInfo.getString("allergen").toString();
            Produkt produkt = new Produkt(allergen, name);
            Log.d(TAG, "gjort produkt");
            lista.add(produkt);
            listView.setAdapter(adapter);
        }
        else {
            ListProduktAdapter adapter = new ListProduktAdapter(Listan.this, lista);
            ListView listView = (ListView) findViewById(R.id.listView);
            Bundle produktInfo = getIntent().getExtras();
            String name = produktInfo.getString("name").toString();
            String allergen = produktInfo.getString("allergen").toString();
            Produkt produkt = new Produkt(allergen, name);
            Log.d(TAG, "gjort produkt");
            lista.add(produkt);
            listView.setAdapter(adapter);
        }
    }

这是我将再次传递它的方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            Log.d(TAG, "Scanning Failed");
            Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
        } else {
            Log.d(TAG, "Scannad");
            Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            Intent i = new Intent(this, getXML.class);
            i.putExtra("barCode", result.getContents());
            i.putExtra("list", lista);
            startActivity(i);
            Log.d(TAG, "Going to new activity");
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

我得到的错误是它“无法解析i.putExtra上的符号'lista'”(“list”,lista); 关于“onActivityResult”

解决:

我通过在mainactivity中启动对象并将其传递给空的活动流来解决问题,直到我开始向其添加数据。

2 个答案:

答案 0 :(得分:0)

您可以使用Java接口。但是,如果您想使用复杂性较低的方法,您还可以使用以下方法。

而是声明两个单独的Activity文件,您可以在活动类文件中声明活动文件。如

href="#"

就像那样,你可以在一个文件中声明两个活动,也可以轻松地从彼此传递数据。

并且在清单中声明使用以下方法:

public class Outerclass{

   //instance method of the outer class 
   void my_Method(){
      int num = 23;

      //method-local inner class
      class MethodInner_Demo{
         public void print(){
            System.out.println("This is method inner class "+num);     
         }   
      }//end of inner class

      //Accessing the inner class
      MethodInner_Demo inner = new MethodInner_Demo();
      inner.print();
   }

   public static void main(String args[]){
      Outerclass outer = new Outerclass();
      outer.my_Method();           
   }
}

但你必须使用

将innerClass decalre为Static
<activity android:name="com.example.foo.OuterActivity$InnerActivity" ></activity>

答案 1 :(得分:0)

如果我误解了你的问题,请纠正我,但为什么要宣布

`ArrayList<Produkt> lista = (ArrayList<Produkt>) getIntent().getSerializableExtra("list");` 

在onCreate()中?

您在onCreate()方法中声明变量而不是作为类成员实例。