gpt4 book ai didi

java - ArrayList getIntent().getStringArrayListExtra

转载 作者:行者123 更新时间:2023-11-29 04:56:05 26 4
gpt4 key购买 nike

我想从一个 Fragment 获取一个 ArrayList 到另一个,我使用 Intent 方法,如下所示:

我想从中获取它的 fragment

                    Intent intent = new Intent(getActivity(), MainActivity.class);
intent.putStringArrayListExtra("server_name_list", server_name_list);

如果我调试它,我可以看到我所做的新条目。但是在我使用 getIntent().getStringArrayListExtraFragment 中,没有新条目。我做错了什么?

这是我使用该方法的 Fragment 中的代码:

/* Server Name Spinner */
ArrayList<String> server_name_list = getIntent().getStringArrayListExtra("server_name_list");

if (server_name_list != null) {

spinner = (Spinner) view.findViewById(R.id.server_spinner);
;
ArrayAdapter<String> server_adapter = new ArrayAdapter<String>(this.getActivity(),
android.R.layout.simple_spinner_item, server_name_list);

server_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(server_adapter);

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

selected = parent.getItemAtPosition(pos).toString();

myWebView.loadUrl(selected);
}

public void onNothingSelected(AdapterView<?> parent) {

}
});

编辑:整个代码

public class MainActivity extends AppCompatActivity implements AddServerFragment.Callback {

static WebView myWebView;
Fragment AddServerFragment, WebViewFragment;
ArrayList<String> server_name_list;

@Override
public ArrayList<String> getArrayListFromActivity() {

WebViewFragment frag = (WebViewFragment) getSupportFragmentManager().findFragmentByTag("AddServerFragment");
if (frag != null) {
server_name_list = frag.getArrayListFromWebViewFragment();
}
return server_name_list;
}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.webview:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new WebViewFragment() {

})
.commit();
return true;
case R.id.add_server:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new AddServerFragment() {

})
.commit();
return true;
case R.id.menu_refresh:
myWebView.reload();
return true;
default:
return true;
}
}

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

if (findViewById(R.id.container) != null) {
if (savedInstanceState != null) {
return;
}
AddServerFragment = new Fragment();
WebViewFragment = new Fragment();
}
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new WebViewFragment() {

})
.commit();
}

/*WebView Fragment*/
public class WebViewFragment extends Fragment {

String selected;
Spinner spinner;

public WebViewFragment(){
}

private Callback callback;

public interface Callback {
public ArrayList<String> getArrayListFromActivity();
}

@Override
public void onAttach(Activity activity) {
callback = (Callback) activity;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.webview, container, false);

/* WebView */
myWebView = (WebView) view.findViewById(R.id.webView);
myWebView.setWebViewClient(new WebC());
WebSettings webSettings = myWebView.getSettings();

/* JavaScript Enable */
webSettings.setJavaScriptEnabled(true);

/* Server Name Spinner */

ArrayList<String> server_name_list = callback.getArrayListFromActivity();

if (server_name_list != null) {

spinner = (Spinner) view.findViewById(R.id.server_spinner);
;
ArrayAdapter<String> server_adapter = new ArrayAdapter<String>(this.getActivity(),
android.R.layout.simple_spinner_item, server_name_list);

server_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(server_adapter);

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

selected = parent.getItemAtPosition(pos).toString();

myWebView.loadUrl(selected);
}

public void onNothingSelected(AdapterView<?> parent) {

}
});
}
return view;
}
}

/*Add Server Fragment*/
public class AddServerFragment extends Fragment
implements View.OnClickListener {

@Override
public void onClick(View view) {
}

public AddServerFragment(){
}

Button btn_back, btn_add;
EditText server_ip, server_name;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.add_ip, container, false);

server_ip = (EditText) view.findViewById(R.id.edit_server_address);
server_name = (EditText) view.findViewById(R.id.edit_server_name);

btn_back = (Button) view.findViewById(R.id.btn_back);
btn_back.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new WebViewFragment() {

})
.commit();
}
});

btn_add = (Button) view.findViewById(R.id.btn_add);
btn_add.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
String new_server_ip = null, new_server_name = null;

ArrayList<String> server_name_list = new ArrayList<>();
ArrayList<String> server_ip_list = new ArrayList<>();

new_server_ip = server_ip.getText().toString();
server_ip_list.add(new_server_ip);

new_server_name = server_name.getText().toString();
server_name_list.add(new_server_name);
}
});

return view;
}
}

/* WebView Client */
public class WebC extends WebViewClient {

@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

super.onReceivedError(view, errorCode, description, failingUrl);

}
}
}

最佳答案

您可以将 ArrayList 存储为容器 Activity 的成员变量:

private ArrayList<String> server_name_list;

添加 setter/getter :

public ArrayList<String> getArrayList() {
return server_name_list;
}

在您的 fragment 中,您可以这样访问它:(假设容器 Activity 的名称是 MainActivity)

ArrayList<String> arraylist = ((MainActivity)getActivity()).getArrayList();

关于java - ArrayList<String> getIntent().getStringArrayListExtra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33719027/

26 4 0