使用Interface将数据从Activity发送到Fragment

时间:2015-03-12 17:49:49

标签: android android-fragments interface

我正在开发一个应用程序,我在下面添加了图片来演示我的问题。当我单击主活动上的星形按钮时,将打开第二个活动。在第二个活动中我有listview,当我点击listview项目时,我想将第二个活动的值发送到Fragment。我能够在两个带有接口的片段之间做这个东西,但是我无法用接口做这个问题。当我在Second Activity中声明接口时,我得到CastExxcceptionError。

我该怎么做?我也试过捆绑但它也带我错误。

我不知道该怎么办?

提前感谢您分享经验。

PS:我在下面添加了代码。第一步是非常好的工作。只有第二步不能正常工作

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

2 个答案:

答案 0 :(得分:0)

您只是使用活动创建(并显示)元素列表。你不能只为此目的使用DialogFragment吗?

通过这种方式,可以轻松进行转换并获得结果。可以找到一个完整的示例here(未经过测试,但我认为您可以在Internet上轻松找到此类资源)。

答案 1 :(得分:0)

使用startActivityForResult为您打电话给第2个活动。

onListItemClick创建Intent的第二个活动中,其中包含您需要的数据extras并调用setResult传递Intent作为参数,{{ 1}}第二个活动。

在第一个活动中,您将在finish()中获得此意图。