安卓:ListView中的主从模板默认选择第一项 [英] Android: Select first item by default in ListView in Master Detail template

查看:320
本文介绍了安卓:ListView中的主从模板默认选择第一项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用编程主从RSS阅读器与左边的列表视图,并在右边的详细视图流。

当创建屏幕的右侧是空的,并且选择在左侧没有项目。我怎样才能默认加载的第一个项目?

我发现这个职位它类似于我的问题:<一href=\"http://stackoverflow.com/questions/19132007/select-the-first-item-by-default-in-a-master-detail-flow\">Select默认情况下,主从流程中的第一项

在我ListFragment的code是这样的:

  @覆盖
    公共无效onActivityCreated(捆绑savedInstanceState){
        super.onActivityCreated(savedInstanceState);        //设置要调用时,列表应该被刷新的监听器。
        ListView控件=(PullToRefreshListView)getListView();        listView.setOnRefreshListener(新OnRefreshListener(){
            @覆盖
            公共无效onRefresh(){
                //刷新列表
                refresh_list();
            }
        });        listView.setVerticalFadingEdgeEnabled(真);        //设置自定义列表适配器到ListView
        适配器=新CustomListAdapter(getActivity(),饲料);
        listView.setAdapter(适配器);        //创建按钮,在点击进入网站
        最终按钮btnAddMore =新按钮(getActivity());
        btnAddMore.setText(R.string.button_text_end_list);
        btnAddMore.setBackgroundColor(getResources()的getColor(R.color.white));
        btnAddMore.setOnClickListener(新OnClickListener(){
               @覆盖
               公共无效的onClick(视图v){
                    //去网站上的点击
                    字符串URL =htt​​p://www.test.de;
                    意向网络=新意图(Intent.ACTION_VIEW,Uri.parse(URL));
                    startActivity(网络);
               }
              });
        //在列表视图的末尾添加按钮
        listView.addFooterView(btnAddMore);
    }    @覆盖
    公共无效onViewCreated(查看视图,捆绑savedInstanceState){
        super.onViewCreated(查看,savedInstanceState);        //恢复previously连载激活项目的位置。
        如果(savedInstanceState!= NULL
                &功放;&安培; savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)){
            setActivatedPosition(savedInstanceState
                    .getInt(STATE_ACTIVATED_POSITION));
        }        //默认情况下在列表视图中选择第一项
        listView.requestFocusFromTouch();
        listView.setSelection(0);
        listView.performItemClick(ListView控件
                。.getAdapter()getView(0,查看,空),0,0);
    }@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);    Log.d(TAG,喂在ItemListFragment);    //显示动作条
    setHasOptionsMenu(真);    //获取参考活动
    对myApp = getActivity()getApplication()。    //检查是否从ItemListActivity意图是空
    捆绑是= getActivity()getIntent()getExtras()。
    如果(是== NULL){
        //如果为null读取本地饲料
        饲料= ReadFeed(文件名);
        Log.d(TAGLese酒店饲料LOKAL:+饲料);
    }其他{
        //否则得到的额外意图
        喂=(RSSFeed中)getActivity()getIntent()getExtras()获得(饲料)。;
        Log.d(TAG,
                意向冯ItemListActivity一个ItemListFragment vorhanden);
    }
}

但我收到此错误:

  6月1日至19日:39:14.723:E / AndroidRuntime(1921年):显示java.lang.NullPointerException:产生的原因
六月一日至19日:39:14.723:E / AndroidRuntime(1921年):在ItemListFragment.onViewCreated(ItemListFragment.java:185)

在该行

  listView.requestFocusFromTouch();

请帮帮我!

CustomListAdapter

 公共类CustomListAdapter延伸BaseAdapter {    私人LayoutInflater layoutInflater;
    公共ImageLoader的ImageLoader的;
    公众的RSSFeed _feed;
    公开日期PDATE;    公共CustomListAdapter(活动活动的RSSFeed供稿){        _feed =饲料;        layoutInflater =(LayoutInflater)活动
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        ImageLoader的=新ImageLoader的(activity.getApplicationContext());
    }    公共无效setNewFeed(RSSFeed中饲料){
        //设置新饲料名单,刷新后
        _feed =饲料;
    }    @覆盖
    公众诠释的getCount(){
        //设置总列表项数
        返回_feed.getItemCount();
    }    @覆盖
    公共对象的getItem(INT位置){
        返回的位置;
    }    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){        //充气的项目布局和设置的意见
        查看的listItem = convertView;
        INT POS =位置;
        如果(的listItem == NULL){
            的listItem = layoutInflater.inflate(R.layout.list_item,NULL);
        }        //初始化布局的意见
        ImageView的IV =(ImageView的)listItem.findViewById(R.id.thumb);
        TextView的tvTitle =(TextView中)listItem.findViewById(R.id.title);
        TextView的tvDate =(TextView中)listItem.findViewById(R.id.date);
        TextView的comment_bubble =(TextView中)listItem.findViewById(R.id.comment_bubble);        //设置布局的意见
        imageLoader.DisplayImage(_feed.getItem(POS).getImage(),IV);
        tvTitle.setText(_feed.getItem(POS).getTitle());        //计算时间差的实际系统时间
        字符串pubdate的= _feed.getItem(POS).getDate();
        SimpleDateFormat的DF =新的SimpleDateFormat(
                EEE,DD MMM YYYY HH:MM:SS,Locale.ENGLISH);
        尝试{
            尝试{
                PDATE = df.parse(pubdate的);
            }赶上(java.text.ParseException E){
                // TODO自动生成catch块
                e.printStackTrace();
            }
            pubdate的=VOR
                    + DateUtils.getDateDifference(PDATE);
        }赶上(ParseException的E){
            Log.e(日期解析,错误分析日期..);        }
        //设置时间差
        tvDate.setText(pubdate的);        //集泡评论
        comment_bubble.setText(_feed.getItem(POS).getComment());        返回的listItem;
    }
}


解决方案

我解决了它这种方式我ListFragment里:

  @覆盖
    公共无效调用onStart(){
        super.onStart();        //设置第一项默认激活
        onListItemClick(的ListView,getView(),1,0);
    }
/ **
 *启用激活上点击模式。当此模式时,列表项将是
 *给出的激活状态时感动。
 * /
公共无效setActivateOnItemClick(布尔activateOnItemClick){
    //当设置CHOICE_MODE_SINGLE,自动的ListView会
    触摸时//给项目激活状态。
    listView.setChoiceMode(activateOnItemClick?ListView.CHOICE_MODE_SINGLE
            :ListView.CHOICE_MODE_NONE);
}

I program a RSS reader with Master Detail flow with a list view on the left, and a detail view on the right.

When the screen is created the right side is empty and no item on the left is selected. How can I load the first item by default?

I found this post which is similar to my problem: Select the first item by default in a Master Detail flow

The code in my ListFragment looks like this:

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        // Set a listener to be invoked when the list should be refreshed.
        listView = (PullToRefreshListView) getListView();

        listView.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh() {
                //refresh list
                refresh_list();
            }
        });

        listView.setVerticalFadingEdgeEnabled(true);

        // Set custom list adapter to the ListView
        adapter = new CustomListAdapter(getActivity(), feed);
        listView.setAdapter(adapter);

        //create button, on click go to website
        final Button btnAddMore = new Button(getActivity());
        btnAddMore.setText(R.string.button_text_end_list);
        btnAddMore.setBackgroundColor(getResources().getColor(R.color.white));
        btnAddMore.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                    // go to website on click
                    String url = "http://www.test.de";
                    Intent web = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(web);
               }
              });
        //add button at the end of the listview
        listView.addFooterView(btnAddMore);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // Restore the previously serialized activated item position.
        if (savedInstanceState != null
                && savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)) {
            setActivatedPosition(savedInstanceState
                    .getInt(STATE_ACTIVATED_POSITION));
        }

        //select the first item in the listview by default
        listView.requestFocusFromTouch();
        listView.setSelection(0);
        listView.performItemClick(listView
                .getAdapter().getView(0, view, null), 0, 0);
    }

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Log.d(TAG, "Hallo in ItemListFragment");

    // show ActionBar
    setHasOptionsMenu(true);

    // get reference to activity
    myApp = getActivity().getApplication();

    // check if intent from ItemListActivity is null
    Bundle be = getActivity().getIntent().getExtras();
    if (be == null) {
        // if null read local feed
        feed = ReadFeed(fileName);
        Log.d(TAG, "Lese Feed lokal :" + feed);
    } else {
        // else get extras from the intent
        feed = (RSSFeed) getActivity().getIntent().getExtras().get("feed");
        Log.d(TAG,
                "Intent von ItemListActivity an ItemListFragment vorhanden");
    }
}

But I receive this error:

01-19 06:39:14.723: E/AndroidRuntime(1921): Caused by: java.lang.NullPointerException
01-19 06:39:14.723: E/AndroidRuntime(1921):     at ItemListFragment.onViewCreated(ItemListFragment.java:185)

in the line

listView.requestFocusFromTouch();

Please help me!

CustomListAdapter

public class CustomListAdapter extends BaseAdapter {

    private LayoutInflater layoutInflater;
    public ImageLoader imageLoader;
    public RSSFeed _feed;
    public Date pDate;

    public CustomListAdapter(Activity activity, RSSFeed feed) {

        _feed = feed;

        layoutInflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader = new ImageLoader(activity.getApplicationContext());
    }

    public void setNewFeed(RSSFeed feed) {
        // set new Feed list, after refresh
        _feed = feed;
    }

    @Override
    public int getCount() {
        // Set the total list item count
        return _feed.getItemCount();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // Inflate the item layout and set the views
        View listItem = convertView;
        int pos = position;
        if (listItem == null) {
            listItem = layoutInflater.inflate(R.layout.list_item, null);
        }

        // Initialize the views in the layout
        ImageView iv = (ImageView) listItem.findViewById(R.id.thumb);
        TextView tvTitle = (TextView) listItem.findViewById(R.id.title);
        TextView tvDate = (TextView) listItem.findViewById(R.id.date);
        TextView comment_bubble = (TextView) listItem.findViewById(R.id.comment_bubble);

        // Set the views in the layout
        imageLoader.DisplayImage(_feed.getItem(pos).getImage(), iv);
        tvTitle.setText(_feed.getItem(pos).getTitle());

        // calculate the time difference to the actual system time
        String pubDate = _feed.getItem(pos).getDate();
        SimpleDateFormat df = new SimpleDateFormat(
                "EEE, dd MMM yyyy HH:mm:ss",Locale.ENGLISH);
        try {
            try {
                pDate = df.parse(pubDate);
            } catch (java.text.ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            pubDate = "Vor "
                    + DateUtils.getDateDifference(pDate);
        } catch (ParseException e) {
            Log.e("DATE PARSING", "Error parsing date..");

        }
        //set time difference
        tvDate.setText(pubDate);

        //set comment in bubble
        comment_bubble.setText(_feed.getItem(pos).getComment());

        return listItem;
    }
}

解决方案

I solved it this way inside my ListFragment:

    @Override
    public void onStart() {
        super.onStart();

        //set first item activated by default
        onListItemClick(listView, getView(), 1, 0);
    }
/**
 * Turns on activate-on-click mode. When this mode is on, list items will be
 * given the 'activated' state when touched.
 */
public void setActivateOnItemClick(boolean activateOnItemClick) {
    // When setting CHOICE_MODE_SINGLE, ListView will automatically
    // give items the 'activated' state when touched.
    listView.setChoiceMode(activateOnItemClick ? ListView.CHOICE_MODE_SINGLE
            : ListView.CHOICE_MODE_NONE);
}

这篇关于安卓:ListView中的主从模板默认选择第一项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆