2017-02-19 50 views
0

我想在Android中创建一个片段内的列表视图。我已经成功地使用俱乐部数组填充了列表视图,但是当我点击我的列表时,我的方法OnClick从未到达。我希望看到一个吐司与行号弹出。下面为什么我的onClick方法不能在这个片段中达到

请参阅代码:

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

/** 
* club selection java Class 
*/ 



public class ClubsFragment extends Fragment implements View.OnClickListener { 

    String[] mClubArray; 
    ListView MyList; 


    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 


     //returning our layout file 
     //change R.layout.yourlayoutfilename for each of your fragments 

     View view = inflater.inflate(R.layout.fragment_clubs, container, false); 

     mClubArray = getResources().getStringArray(R.array.club_array); 

     ArrayAdapter<String> itemsAdapter = 
       new ArrayAdapter<String>(getContext(), R.layout.list_item_style, mClubArray); 

     MyList = (ListView) view.findViewById(R.id.ClubList); 
     MyList.setAdapter(itemsAdapter); 

     return view; 

    } 


    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     //you can set the title for your toolbar here for different fragments different titles 
     getActivity().setTitle("Clubs"); 

    } 



    @Override 
    public void onClick(View view) { 

     MyList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) 
      { 

       Toast.makeText(getContext(), 
         "Click ListItem Number " + position, Toast.LENGTH_LONG) 
         .show(); 


      } 
     }); 


    } 





} 

回答

1
在onCreateView()

使用OnItemClickListener

后u盘适配器

MyList.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> adapter, View v, int position, 
      long arg3) 
     { 
      String value = (String)adapter.getItemAtPosition(position); 
      Toast.makeText(this,value,Toast.LENGTH_SHORT).show(); 
      list.remove(position); 
      adapter.notifyDataSetChanged(); 
      // do what you intend to do on click of listview row 
     } 
    }); 

删除项目:

ArrayList<String> list =new ArrayList<String>(Arrays.asList(mClubArray)); //declare globally so that u can access it 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, list); 

MyList.setAdapter(adapter); 
    MyList.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(getActivity(), "You selected : " + item, Toast.LENGTH_SHORT).show(); 
      String item = list.get(position); 
      list.remove(position); 
      adapter.notifyDataSetChanged(); 

     } 
    }); 
+0

谢谢你,它是确定在有这个源我onVie wCreated()方法呢? – Malorrr

+0

是的,你可以调用'onViewCreated()'中的点击监听器也 – rafsanahmad007

+0

我真正的计划是从这里删除一个选定的列表项。从这里也可以吗? – Malorrr

1

实现的onclick方法设置的onClick listenser后:像这种

ArrayAdapter<Object> ad = new ArrayAdapter<Object>(this, 
       android.R.layout.simple_list_item_checked, items); 
     setListAdapter(ad); 
     ListView list = getListView(); 
     list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     //list.setItemChecked(0, true); 
     list.setOnItemClickListener(this); 
1

试试这个:

MyList.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> adapter, View v, int position, 
      long arg3) 
     { 
      String value = (String)adapter.getItemAtPosition(position); 
      Toast.makeText(this,value,Toast.LENGTH_SHORT).show(); 

     } 
    }); 
1

问题

当我点击的OnClick永远达不到我名单。

OnClickListenerOnItemClickListener是分别ViewAdapterView clickevent callback接口。回调方法在特定事件发生时被调用。因此,您不在OnClick(View.OnClickListener interface)中实施setOnItemClickListener

解决方案

删除与View.OnClickListener

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    //... 

    MyList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) 
     { 

      Toast.makeText(getContext(), 
        "Click ListItem Number " + position, Toast.LENGTH_LONG) 
        .show(); 


     } 
    }); 

    //... 
} 

参考相关

Callback functions in Java