2013-06-16 4 views
2

У меня есть слайдер, который содержит пользовательский список, он отлично работал, когда я использовал android.R.layout_simple_list_item, когда я изменил его на свой собственный макет, он выглядит лучше, но метод onclick, который я использовал, перестает работать но с ошибками он просто не применяет метод щелчка, может кто-нибудь сказать мне, в чем проблема в моем коде. Спасибо? вот мой код JavaКак установить onclicklistener на этот вид списка

public class MenuFragment extends ListFragment 
{ 
@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    setListAdapter(new ArrayAdapter<String>(getActivity(), 
     R.layout.burger_list,R.id.textView2, new String[] { " Main menu", " My schedual", " Location", " Media", " Tickets", "News","Facebook","Instagram","Policy","Share this app"})); 
    getListView().setCacheColorHint(0); 
} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) 
{ 
    super.onListItemClick(l, v, position, id); 
    ((ActivityMenu)getActivity()).getSlideoutHelper().close(); 

    if(position==0) 
    { 
     Intent i = new Intent(v.getContext(),ActivityMainMenu.class); 
     startActivity(i); 
    }  
    else if(position==1) 
    { 
     Intent i = new Intent(v.getContext(),ActivityMySchedual.class); 
     startActivity(i); 
    } 

    else if(position==2) 
    { 
     Intent i = new Intent(v.getContext(),ActivityMySchedual.class); 
     startActivity(i); 
    } 
    else if(position==3) 
    { 
     Intent i = new Intent(v.getContext(),ActivityMedia.class); 
     startActivity(i); 
    } 

} 
} 

и вот XML-

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#556B2F" > 

<ScrollView 
    android:id="@+id/scrolololo" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" > 

    <TableLayout 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:background="#556B2F" > 

     <TableRow 
      android:id="@+id/tablerow" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:clickable="true" 
      android:gravity="center_vertical" 
      android:paddingBottom="7dp" 
      android:paddingTop="7dp" > 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="320dp" 
       android:layout_height="40dp" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textColor="#FFFFFF" /> 
     </TableRow> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:background="@drawable/main_list_sep" /> 
    </TableLayout> 
</ScrollView> 
</RelativeLayout> 

Этот класс мой слайдер. Все, что я меняю в своем MenuFragment, это повлияет на него. Я застрял!

public class ActivityMenu extends FragmentActivity{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    mSlideoutHelper = new SlideoutHelper(this); 
    mSlideoutHelper.activate(); 
    getSupportFragmentManager().beginTransaction().add(com.korovyansk.android.slideout.R.id.slideout_placeholder, new MenuFragment(), "menu").commit(); 
    mSlideoutHelper.open(); 
} 


@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_BACK){ 
     mSlideoutHelper.close(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 


public SlideoutHelper getSlideoutHelper(){ 
    return mSlideoutHelper; 
} 

private SlideoutHelper mSlideoutHelper; 
} 
+0

Каковы ошибки? –

ответ

1

я думаю, что происходит из-за вас, потому что в макете что-то крадет фокус от вашего клика попробуйте поставить эту линию на макете строк у вас есть, и все элементы, находящиеся внутри него, а также, в их соответствующих XML файлы

android:descendantFocusability="blocksDescendants" 

EDIT:

public class MenuFragment extends ListFragment 
{ 
@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    setListAdapter(new ArrayAdapter<String>(getActivity(), 
     R.layout.burger_list,R.id.textView2, new String[] { " Main menu", " My schedual", " Location", " Media", " Tickets", "News","Facebook","Instagram","Policy","Share this app"})); 
    getListView().setCacheColorHint(0); 
} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) 
{ 
    super.onListItemClick(l, v, position, id); //<-- remove this line, you are supposed to send //it if you don't handle the event, not if you do 
    ((ActivityMenu)getActivity()).getSlideoutHelper().close(); 

    if(position==0) 
    { 
     Intent i = new Intent(v.getContext(),ActivityMainMenu.class); 
     startActivity(i); 
    }  
    else if(position==1) 
    { 
     Intent i = new Intent(v.getContext(),ActivityMySchedual.class); 
     startActivity(i); 
    } 

    else if(position==2) 
    { 
     Intent i = new Intent(v.getContext(),ActivityMySchedual.class); 
     startActivity(i); 
    } 
    else if(position==3) 
    { 
     Intent i = new Intent(v.getContext(),ActivityMedia.class); 
     startActivity(i); 
    } 

} 
} 




    <?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:descendantFocusability="blocksDescendants" //<-- put this line here, also put it in the XML //where your listview resides 
android:background="#556B2F" > 

<ScrollView 
    android:id="@+id/scrolololo" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 
    android:descendantFocusability="blocksDescendants" //<-- put this line here 
    android:layout_alignParentRight="true" > 

    <TableLayout 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:descendantFocusability="blocksDescendants" //<-- put this line here 
     android:background="#556B2F" > 

     <TableRow 
      android:id="@+id/tablerow" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:clickable="true" 
      android:gravity="center_vertical" 
      android:paddingBottom="7dp" 
      android:paddingTop="7dp" > 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="320dp" 
       android:layout_height="40dp" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textColor="#FFFFFF" /> 
     </TableRow> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:background="@drawable/main_list_sep" /> 
    </TableLayout> 
    </ScrollView> 

</RelativeLayout> 






    public class ActivityMenu extends FragmentActivity{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    mSlideoutHelper = new SlideoutHelper(this); 
    mSlideoutHelper.activate(); 
    getSupportFragmentManager().beginTransaction().add(com.korovyansk.android.slideout.R.id.slideout_placeholder, new MenuFragment(), "menu").commit(); 
    mSlideoutHelper.open(); 
} 


@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_BACK){ 
     mSlideoutHelper.close(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 


public SlideoutHelper getSlideoutHelper(){ 
    return mSlideoutHelper; 
} 

private SlideoutHelper mSlideoutHelper; 

} 
+0

Это не сработало Брат все тот же iam не смог открыть какую-либо деятельность в моем списке любых других решений? пожалуйста, –

+0

вы проверили, если метод onclick даже называется? можете ли вы поместить журнал внутри элементов, выше «запуска» активности, и посмотреть, активирован ли он? также удалите вызов на «super.onListItemClick», который вы должны отправить, если вы * DONT * обрабатываете клик, а не если вы делаете –

+0

, можете ли вы показать мне, как это сделать, потому что я не получаю никакого результата, пожалуйста, –

0

Где ListView в XML?

Из документов Android, поскольку вы используете ListFragment, вы можете объявить ListView в своем XML с идентификатором @android:id/list. Это идентификатор канонического списка.

Во-вторых, если у вас есть ListView, где вы устанавливаете onItemClickListener? Вам нужно будет что-то вроде:

getListView().setOnItemClickListener(new OnItemClickListener() {...}); 

Я бы сделать это в методе onViewCreated(). На этом этапе гарантируется наличие ListView.

+0

Спасибо @ lena-Bru, он отлично работал со мной :) –

+0

рад слышать, mostafa –

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