【问题标题】:How to send value of ArrayList<HashMap<String, Object>> from one to another activity如何将 ArrayList<HashMap<String, Object>> 的值从一个活动发送到另一个活动
【发布时间】:2014-02-25 06:02:24
【问题描述】:

这是列表视图

<LinearLayout
   … >
    <ListView
        android:id="@+id/listView1" >
    </ListView>
</LinearLayout>

还有 3 件物品在 сell

<TextView
            android:id="@+id/text1" />
<TextView
            android:id="@+id/text2" />
<Button
            android:id="@+id/button1"/>

这是代码

public class Spisok extends Activity {

    private ArrayList<HashMap<String, Object>> Irr;
    private static final String Form1 = "form1"; // Форма1
    private static final String Form2 = "form2"; // Форма2
    private static final String Form3 = "form3"; // Форма3

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_spisok);
        setTitle("Irr");

        ListView listView = (ListView) findViewById(R.id.listView1);

        // создаем массив списков
        Irr = new ArrayList<HashMap<String, Object>>();
        HashMap<String, Object> hm;

        hm = new HashMap<String, Object>();
        hm.put(Form1, "1");
        hm.put(Form2, "2");
        hm.put(Form3, "3");
        Irr.add(hm);

        hm = new HashMap<String, Object>();
        hm.put(Form1, "1");
        hm.put(Form2, "2");
        hm.put(Form3, "3");
        Irr.add(hm);

        SimpleAdapter adapter = new SimpleAdapter(this, Irr,
                R.layout.list_item, new String[] { Form1, Form2, Form3 },
                new int[] { R.id.text1, R.id.text2, R.id.text3 });
        listView.setAdapter(adapter);

    listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<> arg0, View arg1, int arg2,
            long arg3) {
    Intent intent = new Intent(this, New.class);
    intent.putExtra("arraylist", Irr);
    startActivity
    }
});

还有这个:

ArrayList<HashMap<String, String>> arl = (ArrayList<HashMap<String, String>>)     getIntent().getSerializableExtra("arraylist");

    TextView Info = (TextView)findViewById(R.id.text9);
    Info.setText("view" +Irr); }

但这是错误的。使用的时候,我的新Activity里都有ArrayList

 intent.putExtra("arraylist", Irr);

我只需要 "hm.put(Form3, "3");" (正确只有“3”值)在我的 NewActivity 中。 帮助我正确地组成它。

【问题讨论】:

  • 你有什么问题?将数据从一个Activity 传输到另一个?还是创建一个新的Activity
  • "将数据从一个 Activity 传输到另一个" 这是问题。新活动必须具有“text3”,与单元格处的按钮一致。
  • “出了点问题”太含糊了。您必须描述您的问题或显示您的错误。以下是如何提问的说明:stackoverflow.com/questions/how-to-ask.
  • 没有错误。只是这是错误的:intent.putExtra ("form3", Form3 );如何修正 put/get 价值?

标签: android-listview arraylist hashmap


【解决方案1】:

你的问题是什么?目前尚不清楚,只是我认为您的 Spisok Activity 中有一个 Button 。所以你需要在你的noCreate() 方法中创建一个Button 对象,就像

Button button1 = (Button)findViewById(R.id.button1);
   button1.setOnClickListener(new onClickListener() {
     @Override
     public void onClick (){
     Intent intent = new Intent (this, SecondActivity.class );
     startActivity(intent);
   }
}

SecondActivity.class 是你的新活动。您需要使用 IDE 手动创建此 Activity 类,还需要将此 Activity 添加到 Manefist 文件中。你可以把你的TextView text3SecondActivity的布局文件放上去。

【讨论】:

  • 是的,但是我应该如何根据单元格上的按下按钮来执行我的新活动由“text3”组成的内容。
  • 根据我的回答。现在如果你按下 button1 然后打开第二个活动。第二个活动已经有一个textview(text3)。现在你想在用户按下 button1 时在 text3 中显示任何信息吗?请清除它
  • list: text1 text2 botton1 / text(1)3 text(2)4 botton1(2) /text(1)5 text(2)6 botton(1)3 / 如果我按下 botton1 应该使用“text2”打开新活动,如果我按 botton(1)3 -> 打开“text(2)6”
【解决方案2】:

您必须使用 putExtra(String key, String dataToTransfer) 方法将 R.id.text3 的文本放入您的意图中。

您的OnItemClickListener 可能如下所示:

listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<> arg0, View arg1, int position,
        long arg3) {
    Intent intent = new Intent (this, SecondActivity.class );
    intent.putExtra("key for my item 3", "put the text you want to transfer here")
    startActivity(intent);

}
});

在新的 Activity 中,你会得到如下传输的数据:

@Override
public void onCreate(Bundle savedInstanceState){
    Intent intent = getIntent();
    String transferedText = intent.getStringExtra("key for my item 3");
}

【讨论】:

  • 请不要将代码放入 cmets!使用评论更新您的问题。
【解决方案3】:

您有一个自定义 ListView(没有自定义列表视图,您无法在单行中管理更多项目),每一行都有两个文本视图和一个按钮。如果用户单击按钮然后打开显示第二个文本视图的新活动,您想要

在你的适配器类的 getView() 方法中写下这段代码

   @Override
public View getView(final int position, View convertView, ViewGroup parent)
{ 
View row = convertView;
Button button1 = (Button) convertView.findViewById(R.id.button1);
TextView text1 = (TextView)convertView.findViewById(R.id.textview1);
TextView text2 = (TextView)convertView.findViewById(R.id.textview2);

button1.setOnClickListener(new OnClickListener()
{
 deleteButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
              Intent intent = new Intent (this, SecondActivity.class );
              String text = text2.getText().toString();
               intent.putExtra("name", "text");                   
              startActivity(intent);  
            }
        });

}

和SecondActivity写这段代码

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.intent);
    Textv = (TextView)findViewById(R.id.tv2);
    Intent iin= getIntent();
    Bundle b = iin.getExtras();

    if(b!=null)
    {
        String j =(String) b.get("name");
        Textv.setText(j);
    }
}

希望对你有帮助

【讨论】:

  • 对不起,我正忙于其他任务。
猜你喜欢
  • 1970-01-01
  • 2020-02-11
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2014-02-10
  • 1970-01-01
相关资源
最近更新 更多