在Activity和Fragment之间使用接口传递数据

3
我正在开发一个应用程序,下面添加了图片以说明我的问题。当我在主活动上点击星形按钮时,第二个活动就会打开。在第二个活动中,我有一个列表视图,当我点击列表视图项目时,我想将值从第二个活动发送到片段中。我能够使用接口在两个片段之间完成这项工作,但是我无法使用接口来解决这个问题。当我在第二个活动中声明接口时,我会得到CastExxcceptionError。

我该如何做?我还尝试过bundle,但也出现了错误。

我不知道怎么做?

提前感谢分享经验。

PS:我添加了以下代码。第1步非常出色。只有第2步不像我希望的那样工作

enter image description here

MainActivity

public class MainActivity extends ActionBarActivity {

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


@Override
public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
    if (id == R.id.action_settings) {
        Intent i = new Intent(MainActivity.this,SecondActivity.class);
        startActivity(i);
    }
    return super.onOptionsItemSelected(item);
}
}

SecondActivity

public class SecondActivity extends Activity {
ListView lv;
ArrayList<String> al = new ArrayList<>();
FragmentActivity fragmentActivity = new FragmentActivity();
FragmentActivity newFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_layout);
    lv = (ListView) findViewById(R.id.listView);
    al.add("District");
    al.add("Parcel");
    al.add("Satellite");
    al.add("Mosaic");
    al.add("Hybrid");
    al.add("Building");
    al.add("Road");
    al.add("Door");
    al.add("Cat");
    al.add("Dog");
    al.add("Bird");
    al.add("Weather");
    al.add("Heaven");
    al.add("Paradise");
    al.add("Super");
    al.add("Wonderful");
    al.add("Great");
    al.add("Thanks");
    al.add("For");
    al.add("Helpings");
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, al);
    lv.setAdapter(arrayAdapter);

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         fragmentActivity.Response(al.get(position));

        }
    });


}

}

FragmentActivity

public class FragmentActivity extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_layout,container,false);
    return v;

}
public void Response(String data){
    Toast.makeText(getActivity(),data,Toast.LENGTH_SHORT).show();
}
}

哪一行代码导致了错误? - IntegralOfTan
@IntegralOfTan fragmentActivity.Response(al.get(position));SecondActivity 中这行代码给我报错了。 - salih
尝试使用getActivity.getApplicationContext()替换getActivity()。 - IntegralOfTan
在同一行代码中给了我一个空指针异常错误。 - salih
运行您的代码时,以调试模式运行,以查找哪个变量为空。 - IntegralOfTan
我认为我的用法不正确。 - salih
2个回答

0

你正在使用一个Activity来创建(和显示)元素列表。你不能只是为此目的使用DialogFragment吗?

这样做,很容易进行转换并获得结果。一个完整的例子可以在这里找到(未经测试,但我认为你可以轻松地在互联网上找到这种资源)。


0

使用startActivityForResult从第一个活动调用第二个活动。

在第二个活动中,在onListItemClick中创建包含所需数据的Intent作为extras,并将该Intent作为参数传递给setResult,然后finish()第二个活动。

在第一个活动中,您将在OnActivityResult中获取此Intent


谢谢您的评论@Alex,我可以在onoptionsmenuitemclick或button click中使用startactivityforresult吗? - salih
当然可以,在Activity或Fragment的任何位置。但是,如果在内部类中,则使用YourActivity.this而不是仅仅用this。 - Alexander Kulyakhtin
当我尝试在按钮内添加startActivityForResult时,它无法被解析。 - salih

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接