![](/img/trans.png)
[英]I have a custom cell in a ListView. How can do I make it highlighted on touch?
[英]How do I get an ArrayList of common elements between two lists that can be populated to a listview.
因此,我正在編寫一個應用程序,該應用程序將返回兩個演員的共同攝影作品。 我已經解析了包含數據的JSON,直到有兩個ArrayList包含針對每個搜索查詢的攝影的數據為止。 然后,我制作了一個commonFilmography列表,其中僅包含兩個搜索查詢共有的標題。 我想在列表視圖中顯示此列表。 到目前為止,我所做的研究使我相信我需要在AsyncTask中執行此操作,因為該操作是網絡操作,並且我的類應返回ArrayList>類型。 我不確定我返回的commonFilmography語句的范圍。 它不斷出現未定義。 總的來說,這是我最好的方法嗎? 我是Android和Java的新手,正在學習。 我在第159行也有警告HashSet是原始類型。 不確定那是什么意思。 謝謝!
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;
import android.widget.Button;
import android.view.View;
import android.util.Log;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class Main extends Activity {
private static String personURL = "http://api.themoviedb.org/3/search/person?api_key=bb0b6d66c2899aefb4d0863b0d37dc4e&query=";
private static String creditURlBase = "http://api.themoviedb.org/3/person";
private static String TAG_CAST = "cast";
private static String TAG_ID = "id";
private static String TAG_NAME = "name";
private static String TAG_RESULTS = "results";
private static String TAG_TITLE = "title";
String title = null;
JSONArray idOne = null;
JSONArray idTwo = null;
JSONArray firstCast = null;
JSONArray secondCast = null;
EditText searchOne;
EditText searchTwo;
Button findMovies;
List<String> searchOneFilmography = new ArrayList<String>();
List<String> searchTwoFilmography = new ArrayList<String>();
ArrayList<HashMap<String, String>> commonFilmogrpahy = new ArrayList<HashMap<String, String>>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.totlayout);
searchOne = (EditText) findViewById(R.id.searchOne);
searchTwo = (EditText) findViewById(R.id.searchTwo);
findMovies = (Button) findViewById(R.id.findMovies);
//getting
findMovies.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new getResults().execute();
}
});
}
public class getResults extends AsyncTask<String, Void, ArrayList<HashMap<String, String>> > {
@Override
protected ArrayList<HashMap<String, String>> doInBackground(
String... params) {
// TODO Auto-generated method stub
//get names from each text box
String nameOne = searchOne.getText().toString();
String nameTwo = searchTwo.getText().toString();
nameOne = nameOne.replace(" ", "_");
nameTwo = nameTwo.replace(" ", "_");
String searchOneURL = personURL + nameOne;
String searchTwoURL = personURL + nameTwo;
//Hashmap for ListView
//Create JSON Parser Instanece
JSONParser jParser = new JSONParser();
//getting JSON string from url
JSONObject jsonOne = jParser.getJSONFromUrl(searchOneURL);
JSONObject jsonTwo = jParser.getJSONFromUrl(searchTwoURL);
try {
//Get ID of each person
idOne = jsonOne.getJSONArray(TAG_ID);
idTwo = jsonTwo.getJSONArray(TAG_ID);
String firstID = null;
String secondID = null;
for(int i = 0; i < idOne.length(); i++){
JSONObject iDeeOne = idOne.getJSONObject(i);
//store each json item in variable
firstID = iDeeOne.getString(TAG_ID);
}
for(int i = 0; i < idTwo.length(); i++){
JSONObject iDeeTwo = idTwo.getJSONObject(i);
//store each json item in variable
secondID = iDeeTwo.getString(TAG_ID);
}
String creditURlBase = "http://api.themoviedb.org/3/person";
String firstCreditURL = creditURlBase + firstID;
String secondCreditURL = creditURlBase + secondID;
JSONObject jSon = jParser.getJSONFromUrl(firstCreditURL);
firstCast = jSon.getJSONArray(TAG_CAST);
for(int i = 0; i < firstCast.length(); i++){
JSONObject c = firstCast.getJSONObject(i);
title = c.getString(TAG_TITLE);
searchOneFilmography.add(title);
}
secondCast = jSon.getJSONArray(TAG_CAST);
for(int i = 0; i < secondCast.length(); i++){
JSONObject c = firstCast.getJSONObject(i);
title = c.getString(TAG_TITLE);
searchTwoFilmography.add(title);
}
//create hashmap
HashMap<String, String> map = new HashMap<String, String>();
Set hashset = new HashSet(searchOneFilmography);
for(int i = 0; i < searchTwoFilmography.size(); i++){
if(hashset.contains(searchTwoFilmography.get(i))){
map.put(TAG_TITLE, title);
commonFilmogrpahy.add(map);
}
}
}
catch(JSONException e){
Log.e("Error", e.toString());
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.totlayout, menu);
return true;
}
}
嘗試像這樣相交。
public <T> List<T> intersection(List<T> list1, List<T> list2) {
List<T> list = new ArrayList<T>();
for (T t : list1) {
if(list2.contains(t)) {
list.add(t);
}
}
return list;
}
但是,您可能想通過通用軟件使用Endless Adapter,您可以在此處看到Android Endless Adapter
只要您不必等待輸入,就可以在將要傳遞給ListView的ArrayAdapter初始化之前將這兩個交叉。 但是,如果您必須等待此類輸入,那么使用asynctask也是一個好主意:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.