2

編集 私は私のListViewがAsyncTaskによって移入されていることをあなたに言わなければなりません。

以下のコードは、onPostExecuteメソッドで実行すると正常に機能します。

synchronized (mListView) {
            if(mFeeds==null || mFeeds.size()==0){
                Utils.Log("mFeeds empty");
                _this.setListShown(false);
            }else{
                Utils.Log("mFeeds Full");
                _this.setListShown(true);
                mListView.setAdapter(new ListFeedsAdapter(mActivity,mFeeds));
                mListView.notifyAll();

                NewsFeedsDetailViewPagerFragment fragment = (NewsFeedsDetailViewPagerFragment) getFragmentManager()
                        .findFragmentById(R.id.feeddetailViewPagerFragment);

                if(fragment!=null){
                    mListView.performItemClick(null, 0, mListView.getFirstVisiblePosition());

                }
            }

        }

アイテムをクリックすると、詳細ビ​​ューが表示されます...

FragmentをListFragmentに変更しようとしましたが、何も変更されていません...

編集終了

私のアプリケーションでは、左側の画面にListView、右側に詳細ビューを備えたUI(タブレット用)を作成しました。データを読み込んだ後、最初の項目を自動的に選択して詳細を表示したいのですが。

私は電話してこれを行うことができmListView.performItemClick(null, 0, mListView.getFirstVisiblePosition());ます

mListView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
    // TODO Auto-generated method stub

    NewsFeedsDetailViewPagerFragment fragment = (NewsFeedsDetailViewPagerFragment)
            getFragmentManager().findFragmentById(R.id.feeddetailViewPagerFragment);
    if(fragment!=null){
        fragment.setFeedDetail(mFeeds, arg2);
    }
});

さて、私がやりたいのは、タブレット用のGmailアプリケーションのような最初のアイテムを強調することです。私は次のように各行でセレクターの背景を使用します:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/selected_item_background" android:state_activated="true"/>
    <item android:drawable="@drawable/pressed_item_background" android:state_activated="false" android:state_pressed="true"/>
    <item android:drawable="@drawable/pressed_item_background" android:state_focused="true"/>
    <item android:drawable="@drawable/unselected_item_background"/>
</selector>

mListView.getChildAt(arg2).setActivated(true);onItemClickリスナーで使用すると、perforItemClickmListView.getChildAt(arg2)を保持している場合にのみ、nullであるためNullPointerExceptionが発生します。この行にコメントを付けて行をクリックすると、Gmailアプリケーションのようにこの行が強調表示されます。

私を助けて、私が間違っていることを教えてもらえますか?

少し早いですがお礼を

4

4 に答える 4

3

私は自分の問題の解決策を見つけました。同じ状況にある開発者がいる場合は、ここに解決策を投稿します。

アダプターで、位置をアクティブにする必要があるフラグを作成するメソッドを作成しました。getViewメソッドでは、現在の位置をフラグと比較して、行をアクティブにするかどうかを指定します。

((ListFeedsAdapter) mListView.getAdapter()).setItemSelected(mOldPosition);

そしてアダプターで:

private int mItemSelected = -1 ;
public void setItemSelected(int position){
mItemSelected=position;
}

public View getView(int position, View convertView, ViewGroup parent){
       //some code ....
    if(mItemSelected==position){
        convertView.setActivated(true);
    }else{
        convertView.setActivated(false);
    }
}

ありがとうございました !

于 2012-04-25T08:36:07.040 に答える
2

performItemClick()メソッドでnullを渡したためだと思います。

mListView.performItemClick(null, 0, mListView.getFirstVisiblePosition());

次のようなものを試してください:

mListView.performItemClick(mListView.getChildAt(0), 0, mListView.getFirstVisiblePosition());
于 2012-04-24T13:16:16.180 に答える
0

setSelection()を試しましたか?

mListView.setSelection(0)
于 2012-04-24T11:24:05.173 に答える
0

私は答えが受け入れられることを知っています、しかしこれが誰かを助けるならば。

リストの読み込み時にリストビューの最初のビューを自動的に選択/再生する場合は、このリンクにアクセスしてください。私は同じものを探していて、あなたのリストがいっぱいになるまで待つpost()メソッドを見つけました。

これが私の質問リンクです:-リストビューがAndroidにロードされたときにリストの最初のアイテムにアクセスする

これがその解決策のリンクです:-notifyDataSetChangedがAndroidで機能しない後のsmoothScrollToPosition

ただし、getView()でコードを記述すると、getViewが繰り返し呼び出されるため、コストがかかります。ありがとう。

于 2014-04-11T05:34:44.033 に答える