2014年1月13日月曜日

自作Twitterクライアント作成の記録(16)やっぱりストリーミングがうまく動かない

あれから何度も調べていたんですが。
ArrayAdapterにアイテムを追加してそれを反映させるためにはnotifyDataSetChanged()を呼んであげるといいらしいんだけど、
確かにアイテムは追加されるんだけど、反映させるのにスクロールしたり、メニューだしたり、つまり放置しておいて、どんどんListが流れていくという理想の動きにならずに悪戦苦闘中。
(Logではちゃんと即時にツイートが流れてきている様子)

一応自己解決・・・だけどこれが正しいのかわからない。
今度自分流の対処を書いておきますはい。



一体どうしたらあの流れるようなストリーミングを実現できるんだ・・・・
誰かから助言をもらえることを信じてMainActivityここに丸投げしておきます
(見難いソースなのは正直ごめん)

package com.example.zimitta;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import twitter4j.MediaEntity;
import twitter4j.Paging;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.URLEntity;
import twitter4j.UserStreamAdapter;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Color;
import android.graphics.drawable.PaintDrawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.loopj.android.image.SmartImageView;

public class MainActivity extends ListActivity{

private TweetAdapter mAdapter;
    private Twitter mTwitter;
    private long OldStatus = 0;
    private long NewStatus = 0;
    private int Scount = 0;
    private int listposition = 0;
    private int listposition_y = 0;
    private  SharedPreferences sp,sp_ID;
    private Boolean NewReloadFulg = true;
    public static long Userid; //変数の共有化
    public static List StatusIDs = new ArrayList();
    private ProgressDialog progressDialog;
    private MyUserStreamAdapter mMyUserStreamAdapter;
    private TwitterStream twitterStream;
    
    //定数
    public static final String EX_STACK_TRACE = "exStackTrace";
    public static final String PREF_NAME_SAMPLE = "prefNameSample";
    public static final String cache = "tweetcache.txt";
    public static final String cache_mention = "mention_cache.txt";
    private static final String TOKEN = "token";
    private static final String TOKEN_SECRET = "token_secret";
    private static final String PREF_NAME = "twitter_access_token";
    
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("タイムライン");
        // UncaughtExceptionHandlerを実装したクラスをセットする。
        CustomUncaughtExceptionHandler customUncaughtExceptionHandler = new CustomUncaughtExceptionHandler(
                getApplicationContext());
        Thread.setDefaultUncaughtExceptionHandler(customUncaughtExceptionHandler);
     // SharedPreferencesに保存してある例外発生時のスタックトレースを取得します。
        SharedPreferences preferences = getApplicationContext()
                .getSharedPreferences(PREF_NAME_SAMPLE, Context.MODE_PRIVATE);
        String exStackTrace = preferences.getString(EX_STACK_TRACE, null);

        if (!TextUtils.isEmpty(exStackTrace)) {
            // スタックトレースが存在する場合は、
            // エラー情報を送信するかしないかのダイアログを表示します。
            new ErrorDialogFragment(exStackTrace).show(
                    getFragmentManager(), "error_dialog");
            // スタックトレースを消去します。
            preferences.edit().remove(EX_STACK_TRACE).commit();
        }
        if(Build.VERSION.SDK_INT >= 11){
       final ActionBar mActionBar = getActionBar();
       mActionBar.setDisplayShowHomeEnabled(false);
        }
        deleteFile(cache_mention);
        sp = PreferenceManager.getDefaultSharedPreferences(this);
        sp_ID = getSharedPreferences("UserID", 0);
        SharedPreferences spOuth = getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);
        
        if (!TwitterUtils.hasAccessToken(this)) {
            Intent intent = new Intent(this, TwitterOAuthActivity.class);
            startActivity(intent);
            finish();
        }else {
            mAdapter = new TweetAdapter(this);
            setListAdapter(mAdapter);
            
            
            mMyUserStreamAdapter = new MyUserStreamAdapter();
            // Twitter4Jに対してOAuth情報を設定
            ConfigurationBuilder builder = new ConfigurationBuilder();
            {
                // アプリ固有の情報
                builder.setOAuthConsumerKey(getString(R.string.twitter_consumer_key));
                builder.setOAuthConsumerSecret(getString(R.string.twitter_consumer_secret));
                // アプリ+ユーザー固有の情報
                builder.setOAuthAccessToken(spOuth.getString(TOKEN, null));
                builder.setOAuthAccessTokenSecret(spOuth.getString(TOKEN_SECRET, null));
            }
            // 1. TwitterStreamFactory をインスタンス化する
            Configuration conf = builder.build();
            TwitterStreamFactory twitterStreamFactory = new TwitterStreamFactory(conf);
            // 2. TwitterStream をインスタンス化する
            twitterStream = twitterStreamFactory.getInstance();
            ListView lv = getListView();
            final boolean LongTap = sp.getBoolean("Tap_Setting", true);
            
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    //通常押し
    @Override
    public void onItemClick(AdapterView parent, View view,int position, long id) {
    if(LongTap == false){
    List_Menu(position);
    }
    }
    });
            
    lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    //長押し
    @Override
    public boolean onItemLongClick(AdapterView parent, View view,int position, long id) {
    if(LongTap == true){
    List_Menu(position);
    }
    return true;
    }
    });
            mTwitter = TwitterUtils.getTwitterInstance(this);
            //自分のID取得
            Userid = sp_ID.getLong("userid", 0);
            if(Userid == 0){
            Gtet_My_ID();
            }
        ShowprogressDialog();
            reloadTimeLine();
        }
        
    }

//3. UserStream 受信時に応答する(UserStreamListener)リスナーを実装する
class MyUserStreamAdapter extends UserStreamAdapter {
   // 新しいツイート(ステータス)を取得する度に呼び出される
   @Override
   public void onStatus(final Status status) {
       // 6. UserStream 受信時、3 で実装したメソッドが呼び出されるので必要な処理をする
       StatusIDs.add(0 ,status);
            mAdapter.insert(status, 0);
            mAdapter.notifyDataSetChanged();
       Scount = StatusIDs.size() - 1;
NewStatus = StatusIDs.get(0).getId();
OldStatus = StatusIDs.get(Scount).getId();
listposition = getListView().getFirstVisiblePosition();
        listposition_y = getListView().getChildAt(0).getTop();
        getListView().setSelectionFromTop(listposition+1, listposition_y);
       deleteFile(cache);
       Log.v("Twitter4JUserStreamActivity", status.getText());
   }
}
    
    @Override
protected void onResume() {
super.onResume();
PaintDrawable paintDrawable = new PaintDrawable(Color.argb(255,0,0,0));
        getWindow().setBackgroundDrawable(paintDrawable);
}
    
    @Override
protected void onDestroy() {
super.onDestroy();
if(twitterStream != null)
{
twitterStream.shutdown();
}
}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.optionsmenu, menu);
        return true;
    }
    
    private void Gtet_My_ID() {
   AsyncTask> task = new AsyncTask>() {
    @Override
       protected List doInBackground(Void... params) {
        try {
            Paging p = new Paging();
            p.count(1);
               return mTwitter.getUserTimeline(p);
           } catch (TwitterException e){
e.printStackTrace();
} catch(Exception e)
{
e.printStackTrace();
}
           return null;
       }

       @Override
       protected void onPostExecute(List result) {
        progressDialog.dismiss();
        if(result != null){
        Editor e = sp_ID.edit();
           e.putLong("userid", result.get(0).getUser().getId());
           e.commit();
        }
       }
   };
   task.execute();
}
    
    //タイムラインの非同期処理
private void reloadTimeLine() {
    AsyncTask> task = new AsyncTask>() {
    String exception;
    @Override
        protected List doInBackground(Void... params) {
    int i = Integer.parseInt(sp.getString("Load_Tweet", "20"));
        if ((NewStatus == 0) && (NewReloadFulg)){
        try {
        deleteFile(cache);
            Paging p = new Paging();
            p.count(i);
                return mTwitter.getHomeTimeline(p);
} catch (TwitterException e){
e.printStackTrace();
exception = e.getMessage();
} catch(Exception e)
{
e.printStackTrace();
exception = e.getMessage();
}
        }else if((NewStatus != 0) && (NewReloadFulg)){
        try {
                Paging p = new Paging();
                p.setSinceId(NewStatus);
                p.count(200);
                listposition = getListView().getFirstVisiblePosition();
                listposition_y = getListView().getChildAt(0).getTop();
                    return mTwitter.getHomeTimeline(p);
                } catch (TwitterException e) {
                    e.printStackTrace();
                    exception = e.getMessage();
                }
        }else if(!NewReloadFulg){
        try {
                Paging p = new Paging();
                p.setMaxId(OldStatus);
                p.count(i);
                    return mTwitter.getHomeTimeline(p);
} catch (TwitterException e){
e.printStackTrace();
exception = e.getMessage();
} catch(Exception e)
{
e.printStackTrace();
exception = e.getMessage();
}
        }
            return null;
        }

       @Override
       protected void onPostExecute(List result) {
           if (result != null) {
            int count = 0;
            if(NewReloadFulg)
            {
               for (twitter4j.Status status : result) {
                StatusIDs.add(count ,status);
                   mAdapter.insert(status, count);
                   count++;
               }
               if(NewStatus != 0){
                getListView().setSelectionFromTop(listposition+count, listposition_y);
               }
            }else{
            int i = 0;
            for (twitter4j.Status status : result) {
            if(i == 0)
                   {
                    int Scount = StatusIDs.size() - 1;
                    StatusIDs.remove(Scount);
                    mAdapter.remove(status);
                   }
            count++;
                   i++;
                   StatusIDs.add(status);
                   mAdapter.add(status);
            }
            }
               Scount = StatusIDs.size() - 1;
               NewStatus = StatusIDs.get(0).getId();
               OldStatus = StatusIDs.get(Scount).getId();
               progressDialog.dismiss();
               if(count == 0){
                showToast("新着なし。");
               }else{
                showToast(count + "件更新完了!");
               }
               if(sp.getBoolean("Streem_Flug", false)){
                // 4. TwitterStream に UserStreamListener を実装したインスタンスを設定する
                   twitterStream.addListener(mMyUserStreamAdapter);
                   // 5. TwitterStream#user() を呼び出し、ユーザーストリームを開始する
                   twitterStream.user();
               }
           } else {
            progressDialog.dismiss();
               showToast("タイムラインの取得に失敗しました。。。\n" + exception);
           }
       }
   };
   task.execute();
}

//メニューのアイテムを押したときの判別
@Override
public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
       case R.id.menu_refresh: //TL更新
        NewReloadFulg = true;
        ShowprogressDialog();
           reloadTimeLine();
           return true;
       case R.id.menu_tweet: //ツイート画面へ
           Intent intent = new Intent(this, TweetActivity.class);
           startActivity(intent);
           return true;
       case R.id.menu_mention: //リプライのみ
        Intent Imention = new Intent(this, MentionLineActivity.class);
        startActivity(Imention);
        return true;    
       case R.id.menu_setting: //設定画面
        Intent Isetting = new Intent(this, SettingActivity.class);
        startActivity(Isetting);
        return true;
       case R.id.menu_My_Prof: //プロフィール表示
        Intent My_Prof_Intent = new Intent(this, My_Prof_Activiti.class);
        startActivity(My_Prof_Intent);
        return true;
       case R.id.menu_DM: //DM表示
        Intent DM = new Intent(this, DMActivity.class);
        startActivity(DM);
        return true;
   }
   return super.onOptionsItemSelected(item);
}

//RTの非同期処理
private void RTPost(final int position) {
AsyncTask task = new AsyncTask() {
//処理をここに書く
@Override
       protected Boolean doInBackground(Void... params) {
try{
mTwitter.retweetStatus(StatusIDs.get(position).getId());
return true;

} catch (TwitterException e){
e.printStackTrace();
} catch(Exception e)
{
e.printStackTrace();
}
return false;
}
//処理が終わった後の処理
@Override
       protected void onPostExecute(Boolean result) {
if (result != false) {
showToast("リツイートしました。");
           } else {
               showToast("リツイートに失敗しました。。。");
           }
}
};
task.execute();
}

//お気に入りの非同期処理
private void FaPost(final int position) {
AsyncTask task = new AsyncTask() {
//処理をここに書く
@Override
       protected Boolean doInBackground(Void... params) {
try{
mTwitter.createFavorite(StatusIDs.get(position).getId());
return true;
} catch (TwitterException e){
e.printStackTrace();
} catch(Exception e)
{
e.printStackTrace();
}
return false;
}
//処理が終わった後の処理
@Override
       protected void onPostExecute(Boolean result) {
if (result != false) {
showToast("ふぁぼしました。");
           } else {
               showToast("ふぁぼ失敗・・・");
           }
}
};
task.execute();
}

//通信中とかのダイアログをだす
private void ShowprogressDialog() {
progressDialog = new ProgressDialog(MainActivity.this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setCancelable(true);
        progressDialog.setMessage("通信中・・・");
        progressDialog.show();
}

//トースト表示
private void showToast(String text) {
   Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}

public void List_Menu(final int position){
String[] dialogItem;
if(position != Scount){
dialogItem = new String[]{"会話","返信", "リツイート", "ふぁぼ","ユーザー詳細","リンク先を開く","画像を開く"}; //メニューの項目作り
}else{
dialogItem = new String[]{"会話","返信", "リツイート", "ふぁぼ","ユーザー詳細","リンク先を開く","画像を開く","TLの続きを取得"}; //メニューの項目作り    
}
AlertDialog.Builder dialogMenu = new AlertDialog.Builder(MainActivity.this);
        dialogMenu.setItems(dialogItem, new DialogInterface.OnClickListener() {
        @Override
            public void onClick(DialogInterface dialog, int which) {
            switch(which)
            {
            case 0:
            Intent intent_Mention_Line = new Intent(MainActivity.this, MentionToMentionLineActivity.class);
            intent_Mention_Line.putExtra("StutusID", StatusIDs.get(position).getId());
            startActivity(intent_Mention_Line);
            break;
            case 1: //リプライ
            Intent intent = new Intent(MainActivity.this, MentionsActivity.class);
            intent.putExtra("mentionID", StatusIDs.get(position).getId());
            intent.putExtra("StatusID", StatusIDs.get(position).getUser().getScreenName());
            intent.putExtra("Name", StatusIDs.get(position).getUser().getName());
            intent.putExtra("Tweet", StatusIDs.get(position).getText());
            intent.putExtra("Image", StatusIDs.get(position).getUser().getProfileImageURL());
               startActivity(intent);
            break;
            case 2: //リツイート
            new AlertDialog.Builder(MainActivity.this)
            .setTitle("RTしてよろしいですか?")
            .setPositiveButton(
            "はい",
            new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            // OK時の処理
            RTPost(position);
           
            })
            .setNegativeButton( 
            "いいえ",
            new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 
            // NO時の処理
            }
            }) 
            .show(); 
           
            break;
            case 3: //お気に入り
           
            new AlertDialog.Builder(MainActivity.this)
            .setTitle("ふぁぼしますか?")
            .setPositiveButton(
            "はい",
            new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            // OK時の処理
            FaPost(position);
           
            })
            .setNegativeButton( 
            "いいえ",
            new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 
            // NO時の処理
            }
            }) 
            .show(); 
            break;
            case 4: //ユーザー詳細
            Intent My_Prof_Intent = new Intent(MainActivity.this, Prof_Activiti.class);
            if(StatusIDs.get(position).getRetweetedStatus() == null){
            My_Prof_Intent.putExtra("UserID", StatusIDs.get(position).getUser().getId());
            }else{
            My_Prof_Intent.putExtra("UserID", StatusIDs.get(position).getRetweetedStatus().getUser().getId());
            }
            startActivity(My_Prof_Intent);
            break;
           
            case 5: //URLを開く
            Boolean URLFlug = false;
            try{
            if(StatusIDs.get(position).getRetweetedStatus() == null){
            for (URLEntity UrlLink : StatusIDs.get(position).getURLEntities()) { //普通のURL
            Uri uri = Uri.parse(UrlLink.getURL().toString());
            Intent i = new Intent(Intent.ACTION_VIEW,uri);
            startActivity(i);
            URLFlug = true;
            }
            }else{
            for (URLEntity UrlLink : StatusIDs.get(position).getRetweetedStatus().getURLEntities()) { //普通のURL
            Uri uri = Uri.parse(UrlLink.getURL().toString());
            Intent i = new Intent(Intent.ACTION_VIEW,uri);
            startActivity(i);
            URLFlug = true;
            }
            }
            if(!URLFlug)
            {
            showToast("URLが見つかりません。。。");
            }
            }catch(Exception e)
    {
            e.printStackTrace();
    showToast("なにかがおかしいです。。。");
    }
            break;
            case 6: //画像を開く
            Boolean ImageFlug = false;
            try{
            if(StatusIDs.get(position).getRetweetedStatus() == null){
            for (MediaEntity UrlLink : StatusIDs.get(position).getMediaEntities()) { //画像のURL
            Intent image = new Intent(MainActivity.this, ImageActivity.class);
            image.putExtra("Imeges", UrlLink.getMediaURL());
                    startActivity(image);
            ImageFlug = true;
            }
            }else{
        for (MediaEntity UrlLink : StatusIDs.get(position).getRetweetedStatus().getMediaEntities()) { //画像のURL
        Intent image = new Intent(MainActivity.this, ImageActivity.class);
        image.putExtra("Imeges", UrlLink.getMediaURL());
                startActivity(image);
        ImageFlug = true;
        }
            }
            if(!ImageFlug)
            {
            showToast("画像が見つかりません。。。");
            }
            }catch(Exception e)
    {
            e.printStackTrace();
    showToast("なにかがおかしいです。。。");
    }
            break;
            case 7: //TLの更新
            NewReloadFulg = false;
            ShowprogressDialog();
            reloadTimeLine();
            break;
            }
        }
        }).create().show();
}
}

class TweetAdapter extends ArrayAdapter {
private LayoutInflater mInflater;

    public TweetAdapter(Context context) {
        super(context, android.R.layout.simple_list_item_1);
        mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    }
    
    static class ViewHolder {  
        SmartImageView icon;
        TextView name;
        TextView screenName;
        TextView text;
        TextView time;
        TextView rt_To;
        TextView rt;
        TextView fav;
        TextView via;
        ImageView tweetStatus;
        ProgressBar progressBar;
        RelativeLayout relativeLayout;
        
    } 

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    Date TimeStatusNow = null;
        Date TimeStatusTweet = null;
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        Long My_ID = MainActivity.Userid; //共有変数の呼び出し
        TimeStatusNow = new Date();
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item_tweet, null);
            
            SmartImageView Icon = (SmartImageView) convertView.findViewById(R.id.icon); //画像View
            TextView Name = (TextView) convertView.findViewById(R.id.name); //名前View
            TextView ScreenName = (TextView) convertView.findViewById(R.id.screen_name); //IDView
            TextView Text = (TextView) convertView.findViewById(R.id.text); //ツイート本文View
            TextView Time =(TextView) convertView.findViewById(R.id.time); //投稿時間View
            TextView RT_To = (TextView) convertView.findViewById(R.id.RT_to); //RTした人View
            TextView RT =(TextView) convertView.findViewById(R.id.RT); //RT数View
            TextView Fav =(TextView) convertView.findViewById(R.id.Fav); //お気に入り数View
            TextView Via =(TextView) convertView.findViewById(R.id.via); //投稿されたクライアント名Viwe
            ImageView TweetStatus = (ImageView) convertView.findViewById(R.id.TweetStatus); //右の帯Viwe
            ProgressBar ProgressBar = (ProgressBar) convertView.findViewById(R.id.progressBar1); //プログレスバーView
            RelativeLayout RelativeLayout = (RelativeLayout) convertView.findViewById(R.id.Tweet_List);
            
            holder = new ViewHolder();
            holder.icon = Icon;
            holder.name = Name;
            holder.screenName = ScreenName;
            holder.text = Text;
            holder.time = Time;
            holder.rt_To = RT_To;
            holder.rt = RT;
            holder.fav = Fav;
            holder.via = Via;
            holder.tweetStatus = TweetStatus;
            holder.progressBar = ProgressBar;
            holder.relativeLayout = RelativeLayout;
            convertView.setTag(holder);
            
        } else {  
            holder = (ViewHolder)convertView.getTag();  
        }  
        Status item = getItem(position);
        holder.icon.setVisibility(View.VISIBLE);
        holder.name.setVisibility(View.VISIBLE);
        holder.screenName.setVisibility(View.VISIBLE);
        holder.text.setVisibility(View.VISIBLE);
        holder.time.setVisibility(View.VISIBLE);
        holder.rt_To.setVisibility(View.VISIBLE);
        holder.rt.setVisibility(View.VISIBLE);
        holder.fav.setVisibility(View.VISIBLE);
        holder.via.setVisibility(View.VISIBLE);
        holder.tweetStatus.setVisibility(View.INVISIBLE);
        if(item != null){
       //RTされたツイートかどうか
       if(item.getRetweetedStatus() == null){        
        holder.icon.setImageUrl(item.getUser().getProfileImageURL());        
        holder.name.setText(item.getUser().getName());        
        holder.screenName.setText( "@" + item.getUser().getScreenName());        
        holder.text.setText(item.getText());
       TimeStatusTweet = item.getCreatedAt();
       cal1.setTime(TimeStatusTweet);
       cal2.setTime(TimeStatusNow);
       long date1 = cal1.getTimeInMillis();
       long date2 = cal2.getTimeInMillis();
       long time = (date2-date1)/1000;
       if(time <= 59)
       {
        holder.time.setText(time + "s前");
       }
       time = time / 60;
       if((time <= 59) && (time >= 1))
       {
        holder.time.setText(time + "m前");
       }
       time = time / 60;
       if((time <= 23) && (time >= 1))
       {
        holder.time.setText(time + "h前");
       }
       time = time / 24;
       if (time != 0)
       {
        holder.time.setText(time + "d前");
       }
       holder.rt_To.setVisibility(View.GONE); //RTした人の名前を非表示
       }else{
        holder.icon.setImageUrl(item.getRetweetedStatus().getUser().getProfileImageURL());
        holder.name.setText(item.getRetweetedStatus().getUser().getName());
        holder.screenName.setText( "@" + item.getRetweetedStatus().getUser().getScreenName());
        holder.text.setText(item.getRetweetedStatus().getText());
       TimeStatusTweet = item.getRetweetedStatus().getCreatedAt();
       cal1.setTime(TimeStatusTweet);
       cal2.setTime(TimeStatusNow);
       long date1 = cal1.getTimeInMillis();
       long date2 = cal2.getTimeInMillis();
       long time = (date2-date1)/1000;
       if(time <= 59)
       {
        holder.time.setText(time + "s前");
       }
       time = time / 60;
       if((time <= 59) && (time >= 1))
       {
        holder.time.setText(time + "m前");
       }
       time = time / 60;
       if((time <= 23) && (time >= 1))
       {
        holder.time.setText(time + "h前");
       }
       time = time / 24;
       if (time != 0)
       {
        holder.time.setText(time + "d前");
       } 
       holder.rt_To.setVisibility(View.VISIBLE);
       holder.rt_To.setText(item.getUser().getName() + " さんがリツイート");
       holder.tweetStatus.setVisibility(View.VISIBLE);
       holder.tweetStatus.setBackgroundColor(Color.GREEN);        
       }
       holder.rt.setText("RT:" + item.getRetweetCount());
       holder.fav.setText("Fav:" + item.getFavoriteCount()); 
       String str = item.getSource();
       str = str.replaceAll("<.+?>", "");
       holder.via.setText(str + "より");
       //自分のツイートか
       if(item.getUser().getId() == My_ID){
        holder.tweetStatus.setVisibility(View.VISIBLE);
        holder.tweetStatus.setBackgroundColor(Color.CYAN);
       }
       //自分宛てのツイートか
       if(item.getInReplyToUserId() == My_ID){
        holder.tweetStatus.setVisibility(View.VISIBLE);
        holder.tweetStatus.setBackgroundColor(Color.RED);
       }
       holder.progressBar.setVisibility(View.INVISIBLE);
        }else{
        holder.icon.setVisibility(View.GONE);
        holder.name.setVisibility(View.GONE);
        holder.screenName.setVisibility(View.GONE);
        holder.text.setVisibility(View.GONE);
        holder.time.setVisibility(View.GONE);
        holder.rt_To.setVisibility(View.GONE);
        holder.rt.setVisibility(View.GONE);
        holder.fav.setVisibility(View.GONE);
        holder.via.setVisibility(View.GONE);
        holder.progressBar.setVisibility(View.VISIBLE);
        }
        holder.relativeLayout.setBackgroundResource(R.drawable.listitem_color);
        return convertView;
    }
}

0 件のコメント:

コメントを投稿