【问题标题】:How to declare an object at class level and get intent data?如何在类级别声明对象并获取意图数据?
【发布时间】:2016-07-06 11:47:34
【问题描述】:

我正在尝试将 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("list", lista); 上“无法解析符号 'lista'”; 关于“onActivityResult”

已解决:

我解决了这个问题,方法是在 mainactivity 中启动对象并将其作为空的活动流传递,直到我开始向它添加数据。

【问题讨论】:

  • 发生了什么错误?
  • 检查我在这里给出的答案,它可能对你的情况有用link
  • @VishalPatoliya 错误是 onActivityResult 上 i.putExtra 时找不到“lista”。
  • @CoolGuyCG 试试看,谢谢:)

标签: android android-intent arraylist


【解决方案1】:

您可以为此使用 Java 接口。但是如果您想使用复杂度较低的方法,也可以使用以下方法。

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

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();           
   }
}

就像您可以在一个文件中声明两个活动一样,也可以轻松地相互传递数据。

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

<activity android:name="com.example.foo.OuterActivity$InnerActivity" ></activity>

但您必须使用静态将 innerClass 标记为静态

public static class InnerActivity{

}

【讨论】:

    【解决方案2】:

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

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

    在 onCreate() 内部?

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

    【讨论】:

    • 问题是,我第一次参加此活动时,该列表还不存在。所以我想在这个活动中创建它,然后传递回到以前的活动,然后再次传递到这个活动并向它添加更多数据。或者,即使我更改了活动,我也可以将数据保存在列表中,这样我就不必来回传递它了。
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多