0

I want to customize textview and want to set image to each row in listview but it is hard for me to implement it because there is already xml such layout file simple_list_item_1 made inbuilt. Please help me how can i implement it. Someone suggest me to use customadapter but how can i use it in coding that is being difficult for me to understand

I have used this line as Adapter

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

MainActivity

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<String, Void, String> {
        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<Tweet> adapter = new ArrayAdapter<Tweet>(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;
        }
    }
}

DAtaAdapter

public class DataAdapter extends BaseAdapter {
    Context mContext; 
    private LayoutInflater mInflater;
    String targetmonth;
    String img;
    //String targetamount; 
    String[] month;
    //String[] year;
    //String[] amount;
    public DataAdapter(Context c, String[] month) {
        this.month = month;
        //this.year = year;
        //this.amount = amount; 
        mContext = c;
        mInflater = LayoutInflater.from(c); 
    } 
    public int getCount() {
        return month.length;
    } 
    public Object getItem(int position) {
        return position;
    } 
    public long getItemId(int position) {
        return position;
    } 
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.customgrid, parent, false);
            holder = new ViewHolder();
            holder.month = (TextView) convertView
                    .findViewById(R.id.targetmonth); 

            //holder.img = (ImageView) convertView.findViewById(R.id.image_id); 
        //  holder.amount = (TextView) convertView.findViewById(R.id.targetamount); 




            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        try {

            holder.month.setText(month[position]);




    //      holder.img.setImageResource(img[position]);
        //  holder.amount.setText(amount[position]);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        return convertView;
    } 
    static class ViewHolder {
        TextView month;
    //  ImageView img;
    //  TextView year, amount; 
    }

}

customgrid

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/image_id"
                android:layout_width="52dp"
                android:layout_height="52dp"
                android:layout_gravity="center"
                android:src="@drawable/ico" />

            <TextView
                android:id="@+id/targetmonth"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_gravity="left"
                android:layout_weight="1"
                android:gravity="left|center"
                android:paddingBottom="5sp"
                android:paddingLeft="10sp"
                android:paddingRight="5sp"
                android:paddingTop="5sp"
                android:text="hello"
                android:textColor="#ffffcc"
                android:textSize="16sp">
            </TextView>
        </LinearLayout>

</LinearLayout>
raj
  • 388
  • 5
  • 24
  • write you own custom adapter by extending arrayadapter – Raghunandan Dec 13 '14 at 11:20
  • `ArrayAdapter al = new ArrayAdapter(); listview.setAdapter(new DataAdapter(MainActivity.this,al.toArray(new String[al.size()])));` i was trying to write like above code but not getting properly can you edit it and tell me how to do it please – raj Dec 13 '14 at 11:28
  • that is wrong. Look at the arrayadapter constructor in the docs. You can also use BaseAdapter. A quick search on google for custom adapter will give you a hint – Raghunandan Dec 13 '14 at 11:31
  • http://stackoverflow.com/questions/17256932/displaying-contact-number-and-contact-name-in-a-custom-list-view. here is one that you can use for reference using baseadapter – Raghunandan Dec 13 '14 at 11:33
  • see i have edited _DataAdapter_ and _customgrid.xml_ Now tell me where to implement it in MainActivity **please** – raj Dec 13 '14 at 11:41
  • Try searching you will find many examples – Raghunandan Dec 13 '14 at 11:42
  • @Raghunandan i have found but it in=s hard for me to implement in above code . – raj Dec 13 '14 at 11:46

0 Answers0