2015-04-24 1 views
0

J'utilise un FrameLayout comme un élément de liste personnalisé. J'ai un onItemClickListener mis en place à la liste, mais mes éléments ont chacun un bouton en eux-mêmes, et tandis que le bouton est cliquable, l'élément lui-même n'est pas et ils sont censés faire des choses différentes. Comment puis-je rendre l'élément ainsi que le bouton à l'intérieur de celui-ci cliquables?Widget android dans un widget ne fonctionne pas comme prévu

Voici le code:

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class ProjectCreateScreen extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.secondary_layout1); 

    final TextView noProject = (TextView) findViewById(R.id.NOPROJECT); 
    Button btn = (Button) findViewById(R.id.addBtn); 

    final ArrayList<String> listItems=new ArrayList<String>(); 
    final ListAdapter addAdapter = new ArrayAdapter<String>(this, 
      R.layout.list_item, R.id.listFrame, listItems); 
    final ListView lv = (ListView) findViewById(R.id.lv); 
    lv.setAdapter(addAdapter); 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      noProject.setVisibility(View.GONE); 
      lv.setVisibility(View.VISIBLE); 
      listItems.add("New Project"); 
      ((ArrayAdapter) addAdapter).notifyDataSetChanged(); 
     } 
    }); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent switchToEdit = new Intent(ProjectCreateScreen.this, 
        teamCreateScreen.class); 
      startActivity(switchToEdit); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 

} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

Le xml élément listview personnalisé:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

    <TextView 
     android:id="@+id/listFrame" 
     android:layout_width="wrap_content" 
     android:layout_height="80dp" 
     android:textSize="20sp" 
     /> 

    <Button android:id="@+id/frameBtn" 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:layout_gravity="top|right" 
     /> 

</FrameLayout> 

Le xml de l'activité:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/rl"> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="60dp" 
    android:text="@string/AddProject" 
    android:id="@+id/addBtn" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" /> 

<TextView 
    android:layout_width="200dp" 
    android:layout_height="wrap_content" 
    android:text="@string/noProjectsNotice" 
    android:id="@+id/NOPROJECT" 
    android:gravity="center" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:textSize="16sp"/> 

<ListView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/addBtn" 
    android:id="@+id/lv" 
    android:visibility="invisible"> 
</ListView> 

</RelativeLayout> 

Répondre

2

Ajoutez les deux attributs suivants pour une vue que vous vouloir être cliquable dans la liste:

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

Cela devrait résoudre la plupart des cas. Si cela ne suffit pas, ajoutez également l'attribut suivant à la disposition racine de la présentation de votre liste.

+0

Merci, cela a fait l'affaire! :) – Richard