0

Это может быть дублирующий вопрос, но я просмотрел много вопросов SO, но не нашел ничего, что помогло.ActionBar 2 вкладки, списки на каждой вкладке, строка onClick не всегда срабатывает

У меня есть приложение, которое имеет 2 вкладки с помощью ActionBar. Каждый из них является ListFragment, и я не могу выбрать любой из них. Они будут заполняться просто отлично, но onListItemClick просто не срабатывает. Он также не срабатывает, если я использую setOnItemClickListener непосредственно в моем ListView. Однако, если я просто расширяю фрагмент, а не ListFragment, если я присоединяю 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(); 
    } 
} 

Это пример одного из моих фрагментов:

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> 

ответ

0

Хорошо, так что я нашел мою проблему. В моем «single_item» xml-файле у меня был ImageButton, который воровал фокус. Я поменял его на ImageView, и он работает отлично.

 Смежные вопросы

  • Нет связанных вопросов^_^