Android 如何在我的应用程序片段应用程序中调用crouton.makeText?

Android 如何在我的应用程序片段应用程序中调用crouton.makeText?,android,android-fragments,android-notifications,crouton,Android,Android Fragments,Android Notifications,Crouton,我想使用Crouton Library打印asyntask之后收到的文章数量 我的应用程序使用navigationDrawer和其他片段 我从未使用过此库,我想知道我必须在哪里调用Crouton.makeText才能在我的应用程序中打印Crouton通知 作为参考,我的应用程序的每个片段都会显示一个列表视图,其中包含一个列表或一篇文章 以下是RssService类的代码: import java.io.IOException; import java.net.URL; import java.u

我想使用Crouton Library打印asyntask之后收到的文章数量

我的应用程序使用navigationDrawer和其他片段

我从未使用过此库,我想知道我必须在哪里调用Crouton.makeText才能在我的应用程序中打印Crouton通知

作为参考,我的应用程序的每个片段都会显示一个列表视图,其中包含一个列表或一篇文章

以下是RssService类的代码:

import java.io.IOException;
import java.net.URL;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.AdapterView;

public class RssService extends AsyncTask<String, Void, List<Article>> {

    private ProgressDialog progress;
    private Context context;
    private BretagneNewsFragment derniereNewsListFrag;

    public RssService(BretagneNewsFragment derniereNewsListFragment) {
        context = derniereNewsListFragment.getActivity();
        derniereNewsListFrag = derniereNewsListFragment;
        progress = new ProgressDialog(context);
        progress.setMessage("Chargement en cours ...");
    }

    protected void onPreExecute() {
        Log.e("ASYNC", "PRE EXECUTE");
        progress.show();
    }

    protected  void onPostExecute(final List<Article>  articles) {
        Log.e("ASYNC", "POST EXECUTE");
        derniereNewsListFrag.getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                ArticleListAdapter adapter = new ArticleListAdapter(derniereNewsListFrag.getActivity(), articles);
                derniereNewsListFrag.setListAdapter(adapter);
                adapter.notifyDataSetChanged();
            }
        });
        progress.dismiss();

        Crouton.makeText(derniereNewsListFrag.getActivity(), "DD", Style.INFO, ???? ).show();

    }


    @Override
    protected List<Article> doInBackground(String... urls) {

        String feed1 = urls[0];
        String feed2 = urls[1];

        URL url1 = null;
        URL url2 = null;

        try {
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader xr = sp.getXMLReader();

            url1 = new URL(feed1);
            url2 = new URL(feed2);

            RssHandler rh = new RssHandler();

            xr.setContentHandler(rh);
            xr.parse(new InputSource(url1.openStream()));

            Log.d("RssService", "doInBackground : URL2 maintenant utilisée");

            xr.setContentHandler(rh);
            xr.parse(new InputSource(url2.openStream()));

            Log.d("RssService", "doInBackground : PARSING FINISHED");
            return rh.getArticleList();

        } catch (IOException e) {
            Log.e("RSS Handler IO", e.getMessage() + " >> " + e.toString());
        } catch (SAXException e) {
            Log.e("RSS Handler SAX", e.toString());
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            Log.e("RSS Handler Parser Config", e.toString());
        }

        return null;

    }
}
import java.io.IOException;
导入java.net.URL;
导入java.util.List;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.parsers.SAXParser;
导入javax.xml.parsers.SAXParserFactory;
导入org.xml.sax.InputSource;
导入org.xml.sax.SAXException;
导入org.xml.sax.XMLReader;
导入de.keyboardsurfer.android.widget.cruton.cruton;
导入de.keyboardsurfer.android.widget.cruton.Style;
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.os.AsyncTask;
导入android.util.Log;
导入android.view.ViewGroup;
导入android.widget.Adapter;
导入android.widget.AdapterView;
公共类RssService扩展异步任务{
私人进展对话进展;
私人语境;
私人布雷塔涅涅涅夫斯特拉格;
公共RSS服务(BretagneNewsFragment-derniereNewsListFragment){
context=dernierensListFragment.getActivity();
derniereNewsListFrag=derniereNewsListFragment;
进度=新建进度对话框(上下文);
进度。设置消息(“按进度计费…”);
}
受保护的void onPreExecute(){
Log.e(“异步”、“预执行”);
progress.show();
}
受保护的void onPostExecute(最终列表文章){
Log.e(“异步”、“后执行”);
derniereNewsListFrag.getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
ArticleListAdapter=新的ArticleListAdapter(derniereNewsListFrag.getActivity(),articles);
DersListFrag.setListAdapter(适配器);
adapter.notifyDataSetChanged();
}
});
进步。解散();
Crouton.makeText(derniereNewsListFrag.getActivity(),“DD”,Style.INFO,??).show();
}
@凌驾
受保护列表doInBackground(字符串…URL){
字符串feed1=URL[0];
字符串feed2=URL[1];
URL url1=null;
URL url2=null;
试一试{
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
url1=新URL(feed1);
url2=新URL(feed2);
RssHandler rh=新的RssHandler();
xr.setContentHandler(右侧);
xr.parse(新输入源(url1.openStream());
日志d(“RssService”、“doInBackground:URL2主租户利用率”);
xr.setContentHandler(右侧);
parse(新的InputSource(url2.openStream());
d(“RssService”,“doInBackground:解析完成”);
返回rh.getArticleList();
}捕获(IOE异常){
Log.e(“RSS处理程序IO”,e.getMessage()+“>>”+e.toString());
}捕获(SAXE异常){
e(“RSS处理程序SAX”,e.toString());
e、 printStackTrace();
}捕获(ParserConfiguration异常e){
e(“RSS处理程序解析器配置”,e.toString());
}
返回null;
}
}
下面是我的ArticleListAdapter的代码:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Random;

import com.rss.R;
import com.rss.utils.DateUtils;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;


public class ArticleListAdapter extends ArrayAdapter<Article> {

    private ArrayList<String> colorList = new ArrayList<String>();

    public ArticleListAdapter(Activity activity, List<Article> articles) {
        super(activity, 0, articles);
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Activity activity = (Activity) getContext();
        LayoutInflater inflater = activity.getLayoutInflater();

        View rowView = inflater.inflate(R.layout.fragment_article_list, null);
        Article article = getItem(position);


        TextView textView = (TextView) rowView.findViewById(R.id.article_title_text);
        textView.setText(article.getTitle());

        TextView src = (TextView) rowView.findViewById(R.id.article_source);
        src.setText(article.getSource());

        if (article.getSource().equals(" LE TELEGRAMME ")) {
            src.setBackgroundColor(Color.parseColor("#D91E00"));
        } else if (article.getSource().equals(" OUEST FRANCE ")) {
            src.setBackgroundColor(Color.parseColor("#FFFFFF"));
            src.setTextColor(Color.parseColor("#EB030C"));
            src.setTypeface(null, Typeface.BOLD);
        } else {
            Log.d("INFO", "SPECIAL CASE !!!");
        }

        TextView dateView = (TextView) rowView.findViewById(R.id.article_listing_smallprint);
        String pubDate = article.getPubDate();

        TextView descriptionView = (TextView) rowView.findViewById(R.id.article_title_description);

        String completeString = article.getDescription();
        String[] strArray = completeString.split("<img");
        String result = strArray [0];

        // Permet de mettre une chaine dans la cas ou nous n'avons pas de description.
        if (result == null || result.trim().equals("")){
            descriptionView.setText("Cet article ne contient pas de description supplémentaire.");
        } else {
            String firstLetterDesc = result.substring(0,1);
            if (firstLetterDesc.equals(" ")) {
                String resultToSet = changeCharInPosition(0, '\0', result);
                descriptionView.setText(resultToSet);
            } else {
                descriptionView.setText(result);
            }
        }

        TextView premiereLettre = (TextView) rowView.findViewById(R.id.premiere_lettre);
        String titleTmp = article.getTitle();
        String firstLetter = titleTmp.substring(0,1);
        premiereLettre.setText(firstLetter.toUpperCase());

        SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss Z", Locale.ENGLISH);
        Date pDate;
        try {
            pDate = df.parse(pubDate);
            pubDate = "   IL Y A " + DateUtils.getDateDifference(pDate);
        } catch (ParseException e) {
            Log.e("DATE PARSING", "Error parsing date..");
            pubDate = "published by " + article.getAuthor();
        }
        dateView.setText(pubDate);

        // Change color of the background of first Letter
        LinearLayout rl = (LinearLayout) rowView.findViewById(R.id.color_letter);
        String codeCouleur = getRandomColorFromList();
        rl.setBackgroundColor(Color.parseColor(codeCouleur));

        return rowView;
    } 

    public String changeCharInPosition(int position, char ch, String str){
        char[] charArray = str.toCharArray();
        charArray[position] = ch;
        return new String(charArray);
    }


}
import java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.List;
导入java.util.Locale;
导入java.util.Random;
导入com.rss.R;
导入com.rss.utils.DateUtils;
导入android.app.Activity;
导入android.graphics.Color;
导入android.graphics.Typeface;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.LinearLayout;
导入android.widget.TextView;
公共类ArticleListAdapter扩展了ArrayAdapter{
private ArrayList colorList=new ArrayList();
public ArticleListAdapter(活动,列出项目){
超级(活动,0,文章);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
活动活动=(活动)getContext();
LayoutInflater充气器=活动。getLayoutInflater();
视图行视图=充气机。充气(R.layout.fragment\u article\u list,null);
Article=getItem(位置);
TextView TextView=(TextView)rowView.findViewById(R.id.article\u title\u text);
textView.setText(article.getTitle());
TextView src=(TextView)rowView.findviewbyd(R.id.article\u source);
src.setText(article.getSource());
if(article.getSource()等于(“LE telegrame”)){
src.setBackgroundColor(Color.parseColor(#D91E00”);
}else if(article.getSource().equals(“OUEST FRANCE”)){
src.setBackgroundColor(Color.parseColor(“#FFFFFF”));
src.setTextColor(Color.parseColor(#EB030C));
src.setTypeface(null,Typeface.BOLD);
}否则{
Log.d(“信息”,“特殊情况!!!”);
}
TextView dateView=(TextView)rowView.findViewById(R.id.article\u listing\u smallprint);
字符串pubDate=article.getPubDate();
TextView descriptionView=(TextView)rowView.findViewById(R.id.article\u title\u description);
String completeString=article.getDescription();

String[]strArray=completeString.split(“要显示一个面包块,您需要做的就是引用您的活动,而您确实有

Crouton.makeText(derniereNewsListFrag.getActivity(), "DD", Style.INFO, ???? ).show();
可以替换为

Crouton.makeText(derniereNewsListFrag.getActivity(), "DD", Style.INFO, (ViewGroup) derniereNewsListFrag.getView()).show();

但是请注意,即使您的片段不可用,您的服务基本上也可以运行
Crouton.showText(derniereNewsListFrag.getActivity(), "DD", Style.INFO, (ViewGroup) derniereNewsListFrag.getView());