【问题标题】:onListItemClick not works in the listview using fragmentonListItemClick 在使用片段的列表视图中不起作用
【发布时间】:2013-11-26 10:59:57
【问题描述】:

我已经问过类似的问题,但我没有找到任何解决方案。现在我想尝试找到发布整个 Java 代码的方法。 问题是当我点击列表视图中的一个项目时,什么也没有发生。似乎onListItemClick 没有被解雇。这是代码:

@SuppressLint("NewApi")
public class sensorsbattcpu extends Fragment{
    private ListView listView;
    private SensorManager mSensorManager;
    private List<Sensor> deviceSensors = null;
    public Context context;
    ListView list;

    public static final String PREF_CAPTURE_STATE = "captureState";
    public static final String PREF_CAPTURE_FILE = "captureStatePrefs";
    static final int MENU_CAPTURE_ON = 1;
    static final int MENU_CAPTURE_OFF = 2;

    /** Called when the activity is first created. */
    @SuppressLint("NewApi")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        // Retrieving the currently selected item number
        int position = getArguments().getInt("position");
        // List of rivers
        String[] menus = getResources().getStringArray(R.array.menus);
        View v = inflater.inflate(R.layout.sensorsfragment, container, false);
        // Listview nel sensors.xml layout
        listView = ((ListView)v.findViewById(R.id.listView1));


            mSensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
            ArrayList<SensorItem> items = new ArrayList<SensorItem>();
            List<Sensor> sensors = mSensorManager.getSensorList( Sensor.TYPE_ALL );
            for( int i = 0 ; i < sensors.size() ; ++i )
            items.add( new SensorItem( sensors.get( i ) ) );

            sensorAdapter = new ArrayAdapter( getActivity(),R.layout.customlistview,R.id.text1,items );
            listView.setAdapter( sensorAdapter );
            SharedPreferences appPrefs = getActivity().getSharedPreferences( PREF_CAPTURE_FILE, Context.MODE_PRIVATE );
            captureState = appPrefs.getBoolean( PREF_CAPTURE_STATE, false );


            return v;
        }


    public void onPause() {
        super.onPause();
        SharedPreferences appPrefs = getActivity().getSharedPreferences( PREF_CAPTURE_FILE, Context.MODE_PRIVATE );
        SharedPreferences.Editor ed = appPrefs.edit();
        ed.putBoolean( PREF_CAPTURE_STATE, captureState );
        ed.commit();
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        boolean result = onCreateOptionsMenu(menu);
        menu.add(0, MENU_CAPTURE_ON, 1, R.string.capture_on );
        menu.add(0, MENU_CAPTURE_OFF, 2, R.string.capture_off );
        return result;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch( id ) {
            case MENU_CAPTURE_ON:
                captureState = true;
                break;

            case MENU_CAPTURE_OFF:
                captureState = false;
                break;
        }
        return true;
    }

    @SuppressLint("NewApi")
    protected void onListItemClick(ListView l, View v, int positionItem, long id) {

        Sensor sensor = sensorAdapter.getItem( positionItem ).getSensor();
        String sensorName = sensor.getName();
Intent i = new Intent();
        i.setClassName( "com.ab.myapp","com.ab.myapp.SensorMonitor" );
        i.putExtra( "sensorname",sensorName );
        startActivity( i );
    }


    private ArrayAdapter<SensorItem> sensorAdapter;
    private boolean captureState = false;

    class SensorItem {
        SensorItem( Sensor sensor ) {
            this.sensor = sensor;
        }

        @SuppressLint("NewApi")
        public String toString() {
            return sensor.getName();
        }

        Sensor getSensor() {
            return sensor;
        }

        private Sensor sensor;
    }

}

我需要帮助。目标是单击一个项目并打开另一个活动。谢谢

【问题讨论】:

    标签: android android-listview android-fragments onitemclicklistener


    【解决方案1】:

    您没有将侦听器附加到 ListView:

    list.setOnItemClickListener(this);
    

    然后你的类必须实现OnItemClickListener 接口。然后你必须实现这个方法:

    @Override
    public void onItemClick(AdapterView<?> parent, View row, int pos, long id) { 
       Sensor sensor = sensorAdapter.getItem(pos).getSensor();
       String sensorName = sensor.getName();
       Intent i = new Intent();
       i.setClassName( "com.ab.myapp","com.ab.myapp.SensorMonitor" );
       i.putExtra( "sensorname",sensorName );
       startActivity( i );
    }
    

    【讨论】:

    • 我尝试添加工具,但它说:The type sensorsbattcpu must implement the inherited abstract method AdapterView.OnItemClickListener.onItemClick(AdapterView&lt;?&gt;, View, int, long)
    • @David_D 仔细检查我的答案。
    • 当你写的时候:// do your stuff 我到底要写什么?而我的protected void onListItemClick 部分必须留在那里?
    【解决方案2】:

    你的类需要实现OnItemClickListener

    public class sensorsbattcpu extends Fragment implements OnItemClickListener{
    

    然后

    listView.setOnItemClickListener(this);
    

    覆盖onItemClick

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
              //do something
    
        }
    

    【讨论】:

    • The type sensorsbattcpu must implement the inherited abstract method AdapterView.OnItemClickListener.onItemClick(AdapterView&lt;?&gt;, View, int, long)
    • @David_D 覆盖 onItemClick 并在那里做你的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多