gpt4 book ai didi

java - 单击时显示 View ( Activity )中相关的数据

转载 作者:行者123 更新时间:2023-12-01 09:12:13 25 4
gpt4 key购买 nike

我从 Api 获取 Json 对象/数组并将其打印到我的 View 中,foreach 数组我在 MainActivity 中打印 id 和名称。

对于每个数组数据,我创建一个按钮。我想移动到另一个Activity并显示当前数组的相关数据。

我的观点看起来像这样:

________________________
id name button <- if one clicks on the button another activity shall show the description of it
________________________

我的大问题是如何在另一个 Activity 中显示相关数据。

我的 MainActivity 如下所示:

public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {


private final static String TAG = MainActivity.class.getSimpleName();

private ProgressDialog pDialog;
private ListView lv;

// URL to get contacts JSON
private static String url = "http://192.168.178.58:8888/test";

ArrayList<HashMap<String, String>> contactList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

contactList = new ArrayList<>();

new GetContacts().execute();

lv = (ListView) findViewById(R.id.list);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);

}

/**
* Async task class to get json by making HTTP call
*/
private class GetContacts extends AsyncTask<Void, Void, Void> {

@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setCancelable(false);
pDialog.show();

}

@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();

// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);

if (jsonStr != null) {
try {
// Getting JSON Array node
JSONArray jsonArray = new JSONArray(jsonStr);

// looping through All Contacts
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);

String id = c.getString("id");
String name = c.getString("name");
String description = c.getString("description");

// tmp hash map for single contact
HashMap<String, String> data = new HashMap<>();

// adding each child node to HashMap key => value
data.put("id", id);
data.put("name", name);
data.put("description", description);

// adding contact to contact list
contactList.add(data);
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});

}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});

}

return null;
}

/**
* In onPostExecute() method the progress dialog is dismissed and the array list data is displayed in list view using an adapter.
* @param result
*/
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
*/
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, contactList,
R.layout.list_item,
new String[]{"name", "description"},
new int[]{R.id.name, R.id.description});

lv.setAdapter(adapter);
}

}

}

编辑:

这就是我的 Intent :

public void openDetails() { // button onclick name
Intent myIntent = new Intent(MainActivity.this, DetailActivity.class);
myIntent.putExtra("key", value);
MainActivity.this.startActivity(myIntent);
}

最佳答案

通常,您可以使用单例在 Activity 之间共享非原始数据。

类似这样的事情,

public class MyData {
private Object data;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}

private static final MyData myData = new MyData();
public static MyData getInstance() {
return myData;
}
}

然后在第一个 Activity 中:

MyData.getInstance().setData(objToShare);

第二个:

objShared = MyData.getInstance().getData();
//do something

关于java - 单击时显示 View ( Activity )中相关的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40849065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com