0

これは重複した質問かもしれませんが、SO の質問をたくさん調べましたが、役立つものは見つかりませんでした。

ActionBar を使用する 2 つのタブを持つアプリがあります。それぞれが ListFragment であり、それらの項目を選択できません。それらは問題なく入力されますが、onListItemClick は起動しません。また、setOnItemClickListener を ListView に直接使用しても起動しません。ただし、ListFragment ではなく Fragment を拡張するだけの場合、各行に onClickListener をアタッチすると、その onClick が起動します。ただし、複数の行をクリックできるようにするため、これは私が望んでいることではありません。誰かが私が間違っていることを理解するのを手伝ってくれますか? 前もって感謝します。

これは私の MainActivity です:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the action bar
        Drawable drawable = getResources().getDrawable(R.drawable.action_bar);
        ActionBar bar = getActionBar();
        bar.setBackgroundDrawable(drawable);
        bar.addTab(bar.newTab().setText("Tab 1").setTabListener(new TabHandler()));
        bar.addTab(bar.newTab().setText("Tab 2").setTabListener(new TabHandler()));
        bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_USE_LOGO);
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        bar.setDisplayShowHomeEnabled(true);
        bar.setDisplayHomeAsUpEnabled(true);
        bar.setDisplayShowTitleEnabled(false);
    }
}

これは私の TabHandler です:

public class TabHandler implements ActionBar.TabListener {
    public Fragment mFragment;

    public TabHandler() { }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        switch (tab.getPosition()) {
            case 0:
                if(mFragment == null) {
                    mFragment = new ListFragmentA();
                    fragmentTransaction.add(android.R.id.content, mFragment, null);
                }
                else {
                    fragmentTransaction.show(mFragment); //Looking into detach and attach as well
                }
                break;
            case 1:
                if(mFragment == null) {
                    mFragment = new ListFragmentB();
                    fragmentTransaction.add(android.R.id.content, mFragment, null);
                }
                else {
                    fragmentTransaction.show(mFragment);
                }
                break;

            default:
                break;
        }
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        if (mFragment != null) {
            mFragment.getFragmentManager().popBackStackImmediate();
            fragmentTransaction.hide(mFragment);
        }
   }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        mFragment.getFragmentManager().popBackStackImmediate();
    }
}

これは私のフラグメントの 1 つの例です。

public class ListFragmentA extends ListFragment {
MyCustomAdapter myCustomAdapter;
ListView myListView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.my_list_background,container,false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if(getActivity() != null) {
        myListView = (ListView)getActivity().findViewById(android.R.id.list);
        if(myListView != null) {
            CrudService itemService = new CrudService<TestItem>(TestItem.class);
            ArrayList<TestItem> myItems = (ArrayList<TestItem>) itemService.FindAll();
            myCustomAdapter = new MyCustomAdapter(getActivity(), myItems);
            myListView.setAdapter(myCustomAdapter);
            myListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            myListView.setOnItemClickListener(new OnItemClickListener(){
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    Log.i("ListFragmentA", "MyListView onItemClick");
                }                
            });
        }
    }
}
//This isn't getting fired
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    Log.i("ListFragmentA", "onListItemClick at position " + position);
}

public class MyCustomAdapter extends ArrayAdapter<TestItem> {
    Context mContext;
    ArrayList<TestItem> mItems;

    public MyCustomAdapter(Context context, ArrayList<TestItem> items) {
        super(context, android.R.id.list, items);
        mContext = context;
        mItems = items;
    }

    public int getCount() {
        return mItems.size();
    }

    public TestItem getItem(int position) {
        return mItems.get(position);
    }

    public long getItemId(int position) {
        return mItems.get(position).getId();
    }

    public View getView(final int position, View convertView, ViewGroup arg2) {
        View rowView = convertView;
        if(rowView == null) {
            LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflater.inflate(R.layout.single_item, null);

            TestItemViewHolder viewHolder = new TestItemViewHolder();

            viewHolder.Name = (TextView)rowView.findViewById(R.id.txt_TestItem_Name);
            //I have a few more things
            rowView.setTag(viewHolder);
        }

        TestItemListViewHolder holder = (TestItemListViewHolder)rowView.getTag();

        TestItem gottenItem = getItem(position);
        holder.Name.setText(gottenItem.getName());
        //I have a few more things
        //However, this will fire if not a ListFragment
        rowView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Log.i("ListFragmentA", "RowView onClick at position " + position);
            }
        });
        return rowView;
    }
}
}

これが私の「my_list_background」xmlの例です

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Tab_Layout_A"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="5dp"
android:background="@color/white">

<!-- listview Title Layout -->
<LinearLayout 
    android:id="@+id/ll_Table_Title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:layout_marginBottom="-15dp"
    android:layout_marginTop="7dp"
    android:layout_marginLeft="11dip"
    android:layout_marginRight="11dip"
    android:orientation="horizontal"
    android:weightSum="100"
    android:background="@color/black">

    <TextView
        android:id="@+id/txt_TestItem_Name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@string/Name"
        android:textColor="@color/white"
        android:textStyle="bold" />
<!--I have omitted the other columns-->
</LinearLayout>

<LinearLayout
    android:id="@+id/message_List_Layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white">
    <ListView 
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </ListView>    
</LinearLayout>
</LinearLayout>

そして私の「single_item」xmlの例

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/single_row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" 
android:gravity="center_vertical"
android:weightSum="100">

<TextView 
    android:id="@+id/txt_TestItem_Name"
    android:layout_width="0dip"
    android:layout_height="wrap_content"
    android:padding="2dip"
    android:layout_weight="25"
    android:textColor="@color/black"/>
<ImageButton 
    android:id="@+id/btn_Next"
    android:layout_width="0dip"
    android:layout_height="wrap_content"
    android:padding="2dip"
    android:layout_weight="2"
    android:background="@drawable/disclosure_button"
    android:contentDescription="@string/next_Button"/>
</LinearLayout>
4

1 に答える 1

0

わかりました、それで私は私の問題を見つけました。「single_item」xmlファイルには、フォーカスを盗んでいたImageButtonがありました。それをImageViewに交換しましたが、問題なく動作します。

于 2013-02-14T22:08:12.237 に答える