Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用接口将数据从活动发送到片段_Android_Android Fragments_Interface - Fatal编程技术网

Android 使用接口将数据从活动发送到片段

Android 使用接口将数据从活动发送到片段,android,android-fragments,interface,Android,Android Fragments,Interface,我正在开发一个应用程序,我在下面添加了一张图片来演示我的问题。当我单击主活动上的星形按钮时,将打开第二个活动。在第二个活动中,我有listview,当我单击listview项时,我想将第二个活动的值发送到片段。我能够用接口在两个片段之间做这些事情,但我不能用接口来做这个问题。当我在第二个活动中声明接口时,我得到CastXXAcceptionError 我该怎么做?我也尝试了捆绑,但它是采取我的错误太多 我不知道该怎么办 提前感谢分享经验 PS:我在下面添加了代码。第一步工作得很好。唯一的第二步不

我正在开发一个应用程序,我在下面添加了一张图片来演示我的问题。当我单击主活动上的星形按钮时,将打开第二个活动。在第二个活动中,我有listview,当我单击listview项时,我想将第二个活动的值发送到片段。我能够用接口在两个片段之间做这些事情,但我不能用接口来做这个问题。当我在第二个活动中声明接口时,我得到CastXXAcceptionError

我该怎么做?我也尝试了捆绑,但它是采取我的错误太多

我不知道该怎么办

提前感谢分享经验

PS:我在下面添加了代码。第一步工作得很好。唯一的第二步不是我想要的

main活动

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

        }
    });


}
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();
}
}
第二活动

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

        }
    });


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

您使用活动只是为了创建(和显示)元素列表。你就不能用一个
对话框片段来实现这个目的吗


这样,很容易进行转换并返回结果。可以找到一个完整的示例(未经测试,但我认为您可以在Internet上轻松找到此类资源)。

使用
startActivityForResult
从第一个活动开始称您为第二个活动

onListItem中的第二个活动中,单击
create
Intent
将所需数据作为
extras
包含,并调用
setResult
将该
Intent
作为参数传递,然后
finish()
第二个活动


在第一个活动中,您将在ActivityResult的
中获得此意图。

哪一行导致错误?@integrationoftan
fragmentActivity.Response(al.get(position))
SecondActivity
此行给我错误。尝试用getActivity替换getActivity()。getApplicationContext()给我nullpointerexception错误。同一行。在调试模式下运行代码,找出哪个变量为Null感谢注释@Alex,我可以在OnOptions MenuItemClick或button click中使用startactivityforresult吗?当然可以,从Activity或Fragment中的任何位置。但是,如果是从内部类,则使用YourActivity。这不仅仅是这个。当我尝试在内部按钮中添加startActivityForResult时,它无法解决。