代码之家  ›  专栏  ›  技术社区  ›  masiboo

Android ListView click侦听器不工作

  •  0
  • masiboo  · 技术社区  · 6 年前

    关于这个问题,我看到了许多问题和答案。我试了几乎所有的答案,但没有一个不适合我。

    我正在使用三星S9手机运行Android 8.0.0(API 26)。

    如果我尝试下面的代码,我会调用setOnItemClickListener。

        mListView = (ListView) findViewById(R.id.azure_photo_list);
        mListView.setDividerHeight(1);
        registerForContextMenu(mListView);
        // ListView Item Click Listener
        mListView.setOnItemClickListener((parent, view, position, id) -> {
            Intent intent = new Intent(getBaseContext(), AzureImageActivity.class);
            intent.putExtra("image", images[position]);
            startActivity(intent);
    
        }); 
    
       String[] images = ImageManager.ListImages();
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(AzurePhotoList.this,
                                android.R.layout.simple_list_item_1, android.R.id.text1, images);
       mListView.setAdapter(adapter);
    

    注意,布局来自Android系统,文本视图来自Android系统。如果我提供自己的布局作为follows:-

    String[] images = ImageManager.ListImages();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(AzurePhotoList.this,                         
    R.layout.content_azure_photo_list,R.id.azure_list_item_name, images);
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nike15 Mark Byers    6 年前

    我克隆了repo,发现代码库中几乎没有问题。

    要使click侦听器工作,您至少必须更改following:-

    1. 处理程序的实现不正确

    为了给你一个好的开始,在你的代码中更改下面提到的2个文件,然后单击listener每次都可以工作。

    1. AzurePhotoList

      public class  AzurePhotoList extends AppCompatActivity
          implements NavigationView.OnNavigationItemSelectedListener {
      
      private final static int MY_REQUEST_PERMISSIONS_READ_EXTERNAL_STORAGE = 102;
      private String[] images;
      private ListView mListView;
      private Handler handler;
      private String[] images_lists;
      
      @SuppressLint("HandlerLeak")
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_azure_photo_list);
          Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
          setSupportActionBar(toolbar);
      
          handler = new Handler(){
              @Override
              public void handleMessage(Message msg) {
                   images_lists = msg.getData().getStringArray("images_list");
       //                AzurePhotoList.this.images = images;
                  ArrayAdapter<String> adapter = new ArrayAdapter<String>(AzurePhotoList.this,
                      R.layout.content_azure_photo_list, R.id.azure_list_item_name, images_lists);
                          /*ArrayAdapter<String> adapter = new ArrayAdapter<String>(AzurePhotoList.this,
                                  R.layout.content_azure_photo_list,R.id.azure_list_item_name, images);*/
                  mListView.setAdapter(adapter);
              }
          };
      
          DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
          ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                  this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
          drawer.addDrawerListener(toggle);
          toggle.syncState();
      
          NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
          navigationView.setNavigationItemSelectedListener(this);
      
          mListView = (ListView) findViewById(R.id.azure_photo_list);
          mListView.setDividerHeight(1);
          registerForContextMenu(mListView);
      
          // ListView Item Click Listener
          mListView.setOnItemClickListener((parent, view, position, id) -> {
              Intent intent = new Intent(AzurePhotoList.this.getBaseContext(), AzureImageActivity.class);
              intent.putExtra("image", images_lists[position]);
              AzurePhotoList.this.startActivity(intent);
      
          });
      
          loadImageFromAzure();
      }
      
      private void loadImageFromAzure(){
          Thread th = new Thread(new Runnable() {
              public void run() {
                  try {
                      final String[] images = ImageManager.ListImages();
                      Bundle bundle = new Bundle();
                      bundle.putStringArray("images_list", images);
                      Message message = new Message();
                      message.setData(bundle);
                      handler.sendMessage(message);
                  }
                  catch(Exception ex) {
                      final String exceptionMessage = ex.getMessage();
                      handler.post(new Runnable() {
                          public void run() {
                              Toast.makeText(AzurePhotoList.this, exceptionMessage, Toast.LENGTH_SHORT).show();
                          }
                      });
                  }
              }});
          th.start();
      }
      
      //your remaining code...
      //...
      
    2. content_azure_photo_list.xml

      <ListView
          android:id="@+id/azure_photo_list"
          android:scrollbars="vertical"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"/>
      
      
      
      <LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:orientation="horizontal">
      
          <TextView
              android:id="@+id/azure_list_item_name"
              android:layout_width="wrap_content"
              android:layout_height="150dp"
              android:textAppearance="@android:style/TextAppearance.Medium" />
      
      </LinearLayout>