1

私はこれを持っています:

ここに画像の説明を入力

赤い四角はいくつかのフラグメントを含むアクティビティで、ほとんどすべてがリストであり、すべてが異なる項目を持ちますが、カスタム ListAdapter クラスによって構築されています。

オレンジ色の四角はそれらの断片の 1 つで、実際には右の引き出しです。このフラグメントは ListFragment から拡張され、Items のない単純な xml を膨らませます。

フラグメントの内部で、onActivityCreatedカスタム ListAdapter をインスタンス化し、スクリーンショットに表示されている項目を入力します。

必要なアイテムのタイプに応じていくつかの xml があります。ここではそのうちの 3 つを確認できます。

  • ボタンのタイトル (緑色の四角)
  • チェック可能項目(右側にチェックアイコンができるもの)
  • レギュラータイトル(「Día y hora del viaje」と書かれたもの)

ボタン タイトル (緑の四角) xml は単純な線形レイアウトです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/menu_row_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <ImageButton
        android:id="@+id/row_button"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:padding="10dp" />

    <TextView
        android:id="@+id/row_title"
        android:layout_width="0px"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:minLines="1"
        android:padding="10dp"
        android:textAppearance="@android:style/TextAppearance.Medium"
        android:textStyle="bold" />

</LinearLayout>

私がやりたいことは、オレンジ色の四角 (私のカスタム ListFragment クラス) からボタンにアクセスして、クリック リスナーを設定することです。私は調査を行い、アダプターからそれを行うことができることを知っています(私はうまく試しました)が、それは私が望んでいないことです.それらは同じアダプターによって構築されているため、同じリスナーを呼び出します。

フラグメントを膨らませた後に試しました:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View fragmentView = inflater.inflate(R.layout.menu_list, null); 
    //Button of location settings
    ((ImageButton)fragmentView.findViewById(R.id.row_button)).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
                //Do here stuff I want to
        }
    }); 
    super.onStart();
    return fragmentView;
}

またからonStart

@Override
public void onStart() {
    //Button of location settings
    ((ImageButton)getView().findViewById(R.id.row_button)).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
                //Here my stuff
        }
    }); 
    super.onStart();
}

また、setListAdapter()

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    //A new instance of my own ListAdapter
    MyListAdapter adapter = new MyListAdapter(getActivity());
    //Prepare my items and its propierties within adapter
    //...
    //Set the Adapter
    setListAdapter(adapter);
    //And then try to get the Button view
    //Button of location settings
    ((ImageButton)getView().findViewById(R.id.row_button)).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            //My stuff here
        }
    }); 
}

しかし、何を推測しますか...フラグメントを膨らませるxmlで常に同じエラーが発生します。クリックリスナーを設定する行を削除すると機能しますが、明らかにボタンは何もしません。

どんな助けでも大歓迎です。

4

1 に答える 1

1

コメントからの回答は次のとおりです。

ボタンは の行に配置されているListViewため、リスト アダプタ ( 内) からのみ見つけることができますgetView()。フラグメントから呼び出しfindViewById()ても、ListView に含まれるビューを返すことはできません。

1 つの解決策は、ボタンをインフレートするときにボタンにタグを設定し、ボタンがクリックされたときにタグに応じて何かを行うことです。

于 2013-07-29T18:37:13.307 に答える