0

カスタムアダプターでOnItemClickListenerを設定しようとしています。オンを押すと、onItemClickは起動しません。onListItemClickが機能していませんか?

属性を追加する必要があることがわかりましたが、それでも機能しません。

   android:focusableInTouchMode="false" 
       android:clickable="false" 
       android:focusable="false" 

活動:

public class StudentActivity { 

    private Activity mActivity; 
    private Student mStudent; 

    private TextView mName; 
    private Button mMonday; 
    private ListView mListView; 

    //That will be deleted 
    private ArrayList<HashMap<String, String>> list; 

    public StudentActivity(Activity activity, Student student) { 
     mActivity = activity; 
     mStudent = student; 

     mName = (TextView) mActivity.findViewById(R.id.name_student); 
     mName.setText(mStudent.getFirstName() + " " + mStudent.getLastName()); 

     mListView = (ListView) mActivity.findViewById(R.id.list_view); 

     list = new ArrayList<>(); 

     int numberOfIntervals = 7; 

     List<String> hours = new ArrayList<>(); 
     hours.add("08:00-10:00"); 
     hours.add("10:00-12:00"); 
     hours.add("12:00-14:00"); 
     hours.add("14:00-16:00"); 
     hours.add("16:00-18:00"); 
     hours.add("18:00-20:00"); 
     hours.add("20:00-22:00"); 

     for (int i = 0; i < numberOfIntervals; i++) { 
      HashMap<String, String> temp = new HashMap<>(); 
      temp.put("First", hours.get(i)); 
      temp.put("Second", ""); 
      list.add(temp); 
     } 

     ListViewAdapter adapter = new ListViewAdapter(mActivity, list); 
     mListView.setAdapter(adapter); 

     addListenerForMondayButton(adapter); 
     addListenerForListViewItem(mListView); 
    } 

    private void addListenerForMondayButton(final ListViewAdapter adapter) { 
     mMonday = (Button) mActivity.findViewById(R.id.name_monday); 

     mMonday.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ReservationTask reservationTask = new ReservationTask(); 
       reservationTask.populateList(adapter); 
      } 
     }); 
    } 

    private void addListenerForListViewItem(ListView view) { 
     view.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       addNotification(); 
      } 
     }); 
    } 

    private void addNotification() { 
     NotificationCompat.Builder builder = 
       new NotificationCompat.Builder(mActivity.getApplicationContext()) 
         .setSmallIcon(R.drawable.arrow_back) 
         .setContentTitle("Notification") 
         .setContentText("This is a test notification"); 

     Intent notificationIntent = new Intent(mActivity.getApplicationContext(), MainActivity.class); 
     PendingIntent contentIntent = PendingIntent.getActivity(mActivity.getApplicationContext(), 0, 
       notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     builder.setContentIntent(contentIntent); 

     NotificationManager manager = (NotificationManager) mActivity.getSystemService(Context.NOTIFICATION_SERVICE); 
     manager.notify(0, builder.build()); 
    } 

アダプタ:

public class ListViewAdapter extends BaseAdapter { 

    private ArrayList<HashMap<String, String>> mList; 
    private List<Reservation> mReservationList; 
    Activity mActivity; 
    TextView mHour; 
    TextView mName; 

    public ListViewAdapter(Activity activity, ArrayList<HashMap<String, String>> list) { 
     super(); 
     mActivity = activity; 
     mList = list; 
    } 

    @Override 
    public int getCount() { 
     return mList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return mList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = mActivity.getLayoutInflater(); 

     convertView=inflater.inflate(R.layout.list_view_item, null); 

     mHour = (TextView) convertView.findViewById(R.id.list_item_hour); 
     mName = (TextView) convertView.findViewById(R.id.list_item_name); 

     HashMap<String, String> map = mList.get(position); 

     mHour.setText(map.get("First")); 
     boolean set = false; 
     if (mReservationList != null && mReservationList.size() > 0) { 
      for (Reservation reservation: mReservationList) { 
       String createInterval = reservation.getStartHour() + "-" + reservation.getEndHour(); 
       if (createInterval.equals(parseTime(mHour.getText().toString()))) { 
        mName.setText("Dima"); 
        set = true; 
       } 
      } 
      if (set == false) { 
       mName.setText(map.get("Second")); 
      } 
     } else { 
      mName.setText(map.get("Second")); 
     } 

     return convertView; 
    } 

    public void populateNameReservation(List<Reservation> reservations) { 
     mReservationList = reservations; 
     notifyDataSetChanged(); 
    } 

    private String parseTime(String intervalTime) { 
     String startHour = intervalTime.substring(0, intervalTime.indexOf("-")); 
     String endHour = intervalTime.substring(intervalTime.indexOf("-") + 1, intervalTime.length()); 
     Time startHourTime = Time.valueOf(startHour + ":00"); 
     Time endHourTime = Time.valueOf(endHour + ":00"); 

     return startHourTime + "-" + endHourTime; 
    } 

リストビューのXMLレイアウト:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
      <LinearLayout 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:orientation="vertical"> 
       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="50dp" 
        android:gravity="center" 
        android:text="Text View" 
        android:id="@+id/list_item_hour" 
        android:focusableInTouchMode="false" 
        android:clickable="false" 
        android:focusable="false"/> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1"> 
       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="50dp" 
        android:gravity="center" 
        android:text="Text View" 
        android:id="@+id/list_item_name" 
        android:focusableInTouchMode="false" 
        android:clickable="false" 
        android:focusable="false"/> 
      </LinearLayout> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 

感謝!!

+0

clickメソッドを呼び出したかどうかを確認してください。 –

+0

あなたの親レイアウト内にandroid:descendantFocusability = "blocksDescendants"という行を追加してください。つまり、LinearLayout –

+0

あなたのアクティビティでaddListenerForListViewItem(listView)を呼び出しましたか? –

答えて

0

このサンプルコードを試してみましょう私は、リストビューでデータを膨らませるためのカスタムクラスと、インテントを使って別のアクティビティにリダイレクトするリストアイテムを1つクリックするリストビューを使用しました。

これが動作コードであることを確認してください。

protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      CustomList customList = new CustomList(TrainingProgrammes.this, listProgrms, reference_IDs, programStatus, _tierLevel, _tierIndexValue, programIDS); 

      listView = (ListView) findViewById(R.id.listView); 
      listView.setAdapter(customList); 
      listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 


        if (programStatus.get(i).equals("Subscribed")) { 

         System.out.println("Program id is trianing programme new : " + programIDS.get(i) + " CLIENT_ID " + _clientID); 


         Intent nextScreen2 = new Intent(getApplicationContext(), TaskList.class); 
         nextScreen2.putExtra("EMAIL_ID", _loginID); 
         nextScreen2.putExtra("PROGRAMME_ID", programIDS.get(i)); 
         nextScreen2.putExtra("CLIENT_ID", _clientID); 
         // nextScreen2.putExtra("PROGRAMME_STATUS", programStatus.get(i)); 
         startActivity(nextScreen2); 

        } 
       } 
      }); 
     } 

希望すると、これが役に立ちます。

+0

どこをコピーしましたか?彼はあなたが全体をブロックすることができない意図がありませんブロック –

+0

私のコードの仲間とそのちょうどサンプル –

関連する問題