[英]Android implement on list item click to pass data to new Activity via custom list adapter
我是Android開發的新手,我嘗試通過檢查其他示例代碼來進行嘗試,並設法將數據從我的網站提取到自定義列表視圖中,我的主要活動顯示如下:當前主要活動快照 ,我在說明中僅顯示了一些文字,我想要如果我單擊列表項,在我的情況下, jobid
將被帶到新的Activity中,即Main2Activity。 我的問題是:我不知道從哪里上的列表項單擊事件實現,我怎么能寫,這樣它可以通過jobid
來Main2Activity。 我的完整MainActivity類源代碼如下。
package com.helloworld.kazitz.mnewonluine;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.helloworld.kazitz.mnewonluine.models.KaziModel;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private TextView tvData;
private ListView lvKazi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvKazi = (ListView)findViewById(R.id.lvKazi);
new JSONTask().execute("http://johnapps.ga/kazitz/kazitz.php");
}
public class JSONTask extends AsyncTask<String, String, List<KaziModel>> {
@Override
protected List<KaziModel> doInBackground(String... params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while((line = reader.readLine()) != null)
{
buffer.append(line);
}
String finalJson = buffer.toString();
JSONObject parentObject = new JSONObject(finalJson);
JSONArray parentArray = parentObject.getJSONArray("kazitz");
List<KaziModel> kaziModelList = new ArrayList<>();
for(int i=0; i<parentArray.length(); i++)
{
JSONObject finalObject = parentArray.getJSONObject(i);
KaziModel kaziModel = new KaziModel();
kaziModel.setId(finalObject.getInt("id"));
kaziModel.setTime(finalObject.getString("time"));
kaziModel.setDomain(finalObject.getString("domain"));
kaziModel.setTitle(finalObject.getString("title"));
kaziModel.setSdesc(finalObject.getString("sdesc"));
kaziModelList.add(kaziModel);
}
return kaziModelList;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally{
if(connection != null) {
connection.disconnect();
}
try {
if(reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(List<KaziModel> result) {
super.onPostExecute(result);
KaziAdapter adapter = new KaziAdapter(getApplicationContext(), R.layout.row, result);
lvKazi.setAdapter(adapter);
// TODO need to set data to the list
}
}
public class KaziAdapter extends ArrayAdapter{
private List<KaziModel> kaziModelList;
private int resource;
private LayoutInflater inflater;
public KaziAdapter(Context context, int resource, List<KaziModel> objects) {
super(context, resource, objects);
kaziModelList = objects;
this.resource = resource;
inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int jobid = kaziModelList.get(position).getId();
if(convertView == null){
convertView = inflater.inflate(resource, null);
}
TextView tvSource;
TextView tvDate;
TextView tvTitle;
TextView tvExcerpt;
tvSource = (TextView)convertView.findViewById(R.id.tvSource);
tvDate = (TextView)convertView.findViewById(R.id.tvDate);
tvTitle = (TextView)convertView.findViewById(R.id.tvTitle);
tvExcerpt = (TextView)convertView.findViewById(R.id.tvExcerpt);
tvSource.setText(kaziModelList.get(position).getDomain());
tvDate.setText(kaziModelList.get(position).getTime());
tvTitle.setText(kaziModelList.get(position).getTitle());
tvExcerpt.setText(kaziModelList.get(position).getSdesc());
return convertView;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_refresh) {
new JSONTask().execute("http://johnapps.ga/kazitz/kazitz.php");
return true;
}
return super.onOptionsItemSelected(item);
}
}
在lvKazi=...
行之后將其添加到onCreate:
lvKazi.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
//do what you are trying to do here
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.