2014-11-22 70 views
0

我想在用户按下对话框的正面按钮时分享适配器的全部内容。 试过这个:如何共享适配器的内容?

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 

adapter.add("String1"); 
adapter.add("String2"); 
adapter.add("String3"); 
adapter.add("String4"); 

dialog.setPositiveButton("Share", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 

      Intent intent = new Intent(); 
      intent.setAction(Intent.ACTION_SEND); 
      intent.setType("text/plain"); 
      for(int i = 0; i <= adapter.getCount(); i++){ 
       intent.putExtra(Intent.EXTRA_TEXT, adapter.getItem(i)); 
      } 
      startActivity(Intent.createChooser(intent, "Share via") 
      ); 
     } 
    }); 

它不起作用。当按下Share按钮时,它会使应用程序崩溃。 任何想法?

编辑感谢您的帮助。这是最终的解决方案:

StringBuilder sb = new StringBuilder(); 
for(int i = 0; i < adapter.getCount(); i++){ 
    sb.append(adapter.getItem(i)).append("\n"); 
} 
intent.putExtra(Intent.EXTRA_TEXT, (CharSequence) sb); 
+0

如果您也包含错误,这将有所帮助 – waqaslam 2014-11-22 15:48:52

+0

对不起,我的意思是应用程序崩溃。 – Bimba 2014-11-22 15:55:22

+0

是的,追加崩溃日志,以便我们知道什么是真正导致问题的原因,因为将最终修饰符设置到适配器应该不会在技术上造成任何麻烦 – waqaslam 2014-11-22 15:59:55

回答

0

试试这个:

for(int i = 0; i < adapter.getCount(); i++){ 
    intent.putExtra(Intent.EXTRA_TEXT, adapter.getItem(i)); 
} 

这将解决您的问题。

+0

嗯,谢谢...它确实解决了我的问题。现在有新的问题:它只共享适配器的最后一行:) – Bimba 2014-11-22 17:18:29

+0

高兴地帮助:) – 2014-11-22 17:19:16

+0

这是因为你正在覆盖for循环相同的额外。 – 2014-11-22 17:23:56

0

试试这个:

for(int i = 0; **i < adapter.getCount()**; i++) 
0

我猜你是在下面的行获得的ArrayIndexOutOfBounds例外:

intent.putExtra(Intent.EXTRA_TEXT, adapter.getItem(i)); //at getItem(i) 

这是因为它上面的条件:

for(int i = 0; i **<=** adapter.getCount(); i++) 

由于索引在Java中从0开始的,所以如果适配器数是8,您应该访问索引从0到7. 因此,如果您删除上述条件为以下:

for(int i = 0; i **<** adapter.getCount(); i++) 

不会有任何例外。 希望有所帮助。

关于您的问题#2,通过意向共享整个阵列适配器的数据,我想你可以创建字符串的备份适配器的数据数组列表,并传递原意,即数组列表通过如下:

i.putStringArrayListExtra(name, value); 

其中name是您正在创建的额外名称(以package名称作为前缀),value是String的Array List。