如何在ListView Acitivity中实现CustomAdapter

我想在textview之前想要图像,并且想要在每一行中自定义TextView,但是我很难实现它,因为已经有xml这样的布局文件simple_list_item_1内置了。 请帮助我如何实现它。

这是simple_list_item编码

   

主要活动

 public class MainActivity extends ListActivity { private ListActivity activity; final static String ScreenName = "google"; final static String LOG_TAG = "rnc"; ListView listview; TextView text; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.twit_list); listview = this.getListView(); activity = this; downloadTweets(); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // selected item String lst_txt = parent.getItemAtPosition(position).toString().trim(); // Launching new Activity on selecting single List Item Intent i = new Intent(MainActivity.this, SingleListItem.class); // sending data to new activity i.putExtra("product",lst_txt ); startActivity(i); } }); } // download twitter timeline after first checking to see if there is a network connection public void downloadTweets() { ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { new DownloadTwitterTask().execute(ScreenName); } else { Log.v(LOG_TAG, "No network connection available."); } } // Uses an AsyncTask to download a Twitter user's timeline private class DownloadTwitterTask extends AsyncTask { final static String CONSUMER_KEY = "keyvaluexxxxx"; final static String CONSUMER_SECRET = "secretkeyxxxxxxx"; final static String TwitterTokenURL = "https://api.twitter.com/oauth2/token"; final static String TwitterStreamURL = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name="; private ProgressDialog progressDialog; @Override // can use UI thread here protected void onPreExecute() { //this.progressDialog = ProgressDialog.show(Boys.this, ""," Look whose back !! Ok Let me see what i have for you "); try{ progressDialog = new ProgressDialog(MainActivity.this,AlertDialog.THEME_HOLO_DARK); progressDialog.setIndeterminate(true); progressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.loader_2)); progressDialog.setMessage("Please Wait ! Unwrapping Something for You..."); progressDialog.show(); progressDialog.setCancelable(false); progressDialog.setCanceledOnTouchOutside(false); } catch(Exception e) { this.progressDialog.dismiss(); Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_LONG).show(); } } @Override protected String doInBackground(String... screenNames) { String result = null; if (screenNames.length > 0) { result = getTwitterStream(screenNames[0]); } return result; } // onPostExecute convert the JSON results into a Twitter object (which is an Array list of tweets @Override protected void onPostExecute(String result) { Twitter twits = jsonToTwitter(result); // lets write the results to the console as well for (Tweet tweet : twits) { Log.i(LOG_TAG, tweet.getText()); } // send the tweets to the adapter for rendering ArrayAdapter adapter = new ArrayAdapter(activity, android.R.layout.simple_list_item_1, twits); setListAdapter(adapter); this.progressDialog.dismiss(); } // converts a string of JSON data into a Twitter object private Twitter jsonToTwitter(String result) { Twitter twits = null; if (result != null && result.length() > 0) { try { Gson gson = new Gson(); twits = gson.fromJson(result, Twitter.class); } catch (IllegalStateException ex) { // just eat the exception } } return twits; } // convert a JSON authentication object into an Authenticated object private Authenticated jsonToAuthenticated(String rawAuthorization) { Authenticated auth = null; if (rawAuthorization != null && rawAuthorization.length() > 0) { try { Gson gson = new Gson(); auth = gson.fromJson(rawAuthorization, Authenticated.class); } catch (IllegalStateException ex) { // just eat the exception } } return auth; } private String getResponseBody(HttpRequestBase request) { StringBuilder sb = new StringBuilder(); try { DefaultHttpClient httpClient = new DefaultHttpClient(new BasicHttpParams()); HttpResponse response = httpClient.execute(request); int statusCode = response.getStatusLine().getStatusCode(); String reason = response.getStatusLine().getReasonPhrase(); if (statusCode == 200) { HttpEntity entity = response.getEntity(); InputStream inputStream = entity.getContent(); BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); String line = null; while ((line = bReader.readLine()) != null) { sb.append(line); } } else { sb.append(reason); } } catch (UnsupportedEncodingException ex) { } catch (ClientProtocolException ex1) { } catch (IOException ex2) { } return sb.toString(); } private String getTwitterStream(String screenName) { String results = null; // Step 1: Encode consumer key and secret try { // URL encode the consumer key and secret String urlApiKey = URLEncoder.encode(CONSUMER_KEY, "UTF-8"); String urlApiSecret = URLEncoder.encode(CONSUMER_SECRET, "UTF-8"); // Concatenate the encoded consumer key, a colon character, and the // encoded consumer secret String combined = urlApiKey + ":" + urlApiSecret; // Base64 encode the string String base64Encoded = Base64.encodeToString(combined.getBytes(), Base64.NO_WRAP); // Step 2: Obtain a bearer token HttpPost httpPost = new HttpPost(TwitterTokenURL); httpPost.setHeader("Authorization", "Basic " + base64Encoded); httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); httpPost.setEntity(new StringEntity("grant_type=client_credentials")); String rawAuthorization = getResponseBody(httpPost); Authenticated auth = jsonToAuthenticated(rawAuthorization); // Applications should verify that the value associated with the // token_type key of the returned object is bearer if (auth != null && auth.token_type.equals("bearer")) { // Step 3: Authenticate API requests with bearer token HttpGet httpGet = new HttpGet(TwitterStreamURL + screenName); // construct a normal HTTPS request and include an Authorization // header with the value of Bearer  httpGet.setHeader("Authorization", "Bearer " + auth.access_token); httpGet.setHeader("Content-Type", "application/json"); // update the results with the body of the response results = getResponseBody(httpGet); } } catch (UnsupportedEncodingException ex) { } catch (IllegalStateException ex1) { } return results; } } } 

这里twit_list.xml附有MainActivity.java

      

在布局文件夹中创建custom_item

     

像这样创建一个自定义适配器

 public class CustomAdapter extends ArrayAdapter { private Context mContext; private int layoutId; private ArrayList dataList; public CustomAdapter(Context context, int resourceId, ArrayList objects) { super(context, resourceId, objects); // TODO Auto-generated constructor stub mContext = context; layoutId = resourceId; dataList = objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder viewHolder; if(convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(layoutId, null); viewHolder = new ViewHolder(); viewHolder.listItemTxtView = (TextView) convertView.findViewById(R.id.listItemTxtView); viewHolder.listItemImgView = (ImageView) convertView.findViewById(R.id.listItemImgView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.listItemTxtView.setText(dataList.get(position).toString()); //place picasso jar into libs folder of your project and use it for download and set images like this Picasso.with(context).load("url of image you want to load").into(viewHolder.listItemImgView); return convertView; } private class ViewHolder { TextView listItemTxtView; ImageView listItemImgView; } } 

从这里下载picassojar子

而不是这个

 ArrayAdapter adapter = new ArrayAdapter(activity, android.R.layout.simple_list_item_1, twits); setListAdapter(adapter); 

用这个

 CustomAdapter adapter = new CustomAdapter(MainActivity.this, R.layout.custom_item, twits); setListAdapter(adapter);