[英]How do I pass id of listview item I got from server to another activity onclick?
我通過一些聯機幫助從服務器成功將數據獲取到列表視圖。 我要去的另一個活動是獲取列表視圖項的“ id”並顯示它。
我一直在努力解決這個問題,但沒有成功。
我的mainactivity.java文件
public class MainActivity extends AppCompatActivity {
ListView listView;
Button button;
// Server Http URL
String HTTP_URL = "http://192.168.100.48/listview/index.php";
// String to hold complete JSON response object.
String FinalJSonObject ;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Assign ID's to ListView.
listView = (ListView) findViewById(R.id.listView1);
button = (Button)findViewById(R.id.button);
progressBar = (ProgressBar)findViewById(R.id.ProgressBar1);
// Adding click listener to button.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Showing progress bar just after button click.
progressBar.setVisibility(View.VISIBLE);
// Creating StringRequest and set the JSON server URL in here.
StringRequest stringRequest = new StringRequest(HTTP_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// After done Loading store JSON response in FinalJSonObject string variable.
FinalJSonObject = response ;
// Calling method to parse JSON object.
new ParseJSonDataClass(MainActivity.this).execute();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Showing error message if something goes wrong.
Toast.makeText(MainActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
}
});
// Creating String Request Object.
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
// Passing String request into RequestQueue.
requestQueue.add(stringRequest);
}
});
}
// Creating method to parse JSON object.
private class ParseJSonDataClass extends AsyncTask<Void, Void, Void> {
public Context context;
// Creating List of Subject class.
List<Subject> CustomSubjectNamesList;
public ParseJSonDataClass(Context context) {
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
try {
// Checking whether FinalJSonObject is not equals to null.
if (FinalJSonObject != null) {
// Creating and setting up JSON array as null.
JSONArray jsonArray = null;
try {
// Adding JSON response object into JSON array.
jsonArray = new JSONArray(FinalJSonObject);
// Creating JSON Object.
JSONObject jsonObject;
// Creating Subject class object.
Subject subject;
// Defining CustomSubjectNamesList AS Array List.
CustomSubjectNamesList = new ArrayList<Subject>();
for (int i = 0; i < jsonArray.length(); i++) {
subject = new Subject();
jsonObject = jsonArray.getJSONObject(i);
//Storing ID into subject list.
subject.Subject_ID = jsonObject.getString("id");
//Storing Subject name in subject list.
subject.Subject_Name = jsonObject.getString("subject_Name");
// Adding subject list object into CustomSubjectNamesList.
CustomSubjectNamesList.add(subject);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
// After all done loading set complete CustomSubjectNamesList with application context to ListView adapter.
ListViewAdapter adapter = new ListViewAdapter(CustomSubjectNamesList, context);
// Setting up all data into ListView.
listView.setAdapter(adapter);
// Hiding progress bar after all JSON loading done.
progressBar.setVisibility(View.GONE);
}
}
}
我的Listviewadapter.java文件
public class ListViewAdapter extends BaseAdapter
{
Context context;
List<Subject> TempSubjectList;
public ListViewAdapter(List<Subject> listValue, Context context)
{
this.context = context;
this.TempSubjectList = listValue;
}
@Override
public int getCount()
{
return this.TempSubjectList.size();
}
@Override
public Object getItem(int position)
{
return this.TempSubjectList.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewItem viewItem = null;
if(convertView == null)
{
viewItem = new ViewItem();
LayoutInflater layoutInfiater = (LayoutInflater)this.context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = layoutInfiater.inflate(R.layout.listview_items, null);
viewItem.IdTextView = (TextView)convertView.findViewById(R.id.textviewID);
viewItem.NameTextView = (TextView)convertView.findViewById(R.id.textviewSubjectName);
convertView.setTag(viewItem);
}
else
{
viewItem = (ViewItem) convertView.getTag();
}
viewItem.IdTextView.setText(TempSubjectList.get(position).Subject_ID);
viewItem.NameTextView.setText(TempSubjectList.get(position).Subject_Name);
return convertView;
}
}
class ViewItem {
TextView IdTextView;
TextView NameTextView;
}
當然,我的subject.java文件
public class Subject {
public String Subject_ID;
public String Subject_Name;
}
IMAGE-它成功顯示服務器中的數據。 但是當我單擊該項目時,我還沒有弄清楚該如何做。
是的,這就是我的睡眠與安寧。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
intent.putExtra("ID",CustomSubjectNamesList.get(position).Subject_ID);
startActivity(intent);
}
});
並從另一個活動
首先,使用getIntent()方法獲取啟動活動的意圖:
Intent intent = getIntent();
如果多余的數據用字符串表示,則可以使用intent.getStringExtra(String name)方法。 在您的情況下:
Intent intent = getIntent();
String id = intent.getStringExtra("ID");
您可以使用intent.putExtra()
將字符串或整數或僅將實現Serializable
實現的任何對象發送到另一個活動
listView.setOnItemClickListener(new AdapaterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
intent.putExtra("id",CustomSubjectNamesList.get(position).Subject_ID;
startActivity(intent);
}
});
在您的新活動中,您將收到剛剛使用getIntent.getIntExtra("id")
或getIntent.getStringExtra()
。 或根據您發送的內容使用其他方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.