2016-03-01 68 views
1

我知道在這裏我們有很多像我這樣的問題,但我不知道爲什麼沒有爲我工作。我的目標是:我有一個AlertDialog ListView與每行中的複選框,我可以選擇一些項目,我希望使用選定的元素使ArrayList。Android - SetOnItemClickListener不起作用

因爲這個原因,我打電話給SetOnclickListener,我把一個Log放在方法裏面,但是什麼也沒做。

我幾乎在任何地方都嘗試過可調焦和可點擊的,但是我的日誌沒有出現。

這裏我警告對話框

private void callAdditionalDialog() { 
    LayoutInflater layoutInflater = LayoutInflater.from(ConfigProductActivity.this); 
    final View additionalView = layoutInflater.inflate(R.layout.dialog_additional, null); 
    additionalView.setFocusable(true); 

    // set the custom dialog components - text, buttons, accountants 
    TextView titleDialog = (TextView) additionalView.findViewById(R.id.title_additional); 
    titleDialog.setTypeface(boldFont); 
    Button buttonAccept = (Button) additionalView.findViewById(R.id.button_accept); 
    buttonAccept.setTypeface(boldFont); 
    Button buttonCancel = (Button) additionalView.findViewById(R.id.button_cancel); 
    buttonCancel.setTypeface(boldFont); 

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ConfigProductActivity.this); 
    alertDialogBuilder.setView(additionalView); 
    final AlertDialog alertD = alertDialogBuilder.create(); 
    alertD.setCanceledOnTouchOutside(false); 
    //Fill object of additional 
    final ListView additionalListView = (ListView) additionalView.findViewById(R.id.list_additional); 
    TextView additionalNotFound = (TextView) additionalView.findViewById(R.id.additional_not_found); 
    if (!withoutModifiers){ 
     additionalAdapter = new AdditionalAdapter(ConfigProductActivity.this, additionalList); 
     additionalListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     additionalListView.setAdapter(additionalAdapter); 
     final ArrayList<ModifierEntity> modifierList = new ArrayList<ModifierEntity>(); 
     additionalListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, 
            View view, int position, long id) { 
       Object modifier = additionalListView.getAdapter().getItem(position).toString(); 
       Log.d(TAG, "SOMETHIIIIING"); 
      } 
     }); 
    } 
    else{ 
     additionalListView.setVisibility(View.GONE); 
     additionalNotFound.setVisibility(View.VISIBLE); 
     additionalNotFound.setTypeface(font); 
     buttonCancel.setVisibility(View.GONE); 
    } 
    //End of fill object of additional 
    buttonCancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      additionalBox.setEnabled(true); 
      alertD.dismiss(); 
     } 
    }); 

    buttonAccept.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //additional.setText(additionalAdapter.getCount()); 
      additionalBox.setEnabled(true); 
      alertD.dismiss(); 
     } 
    }); 
    alertD.show(); 
} 

這裏我的適配器:

public class AdditionalAdapter extends ArrayAdapter { 
private static String TAG = AdditionalAdapter.class.getName(); 
private List<ModifierEntity> originalData = null; 
private ConfigProductActivity activity; 
private Typeface font; 
private Typeface boldFont; 
private static ModifierEntity modifier; 

public AdditionalAdapter (ConfigProductActivity activity, List<ModifierEntity> listArray){ 
    super(activity, R.layout.additional_item); 
    this.activity = activity; 
    this.originalData = listArray ; 
    font = Typeface.createFromAsset(activity.getAssets(),"HelveticaNeueThn.ttf"); 
    boldFont = Typeface.createFromAsset(activity.getAssets(), "avgardm.ttf"); 
} 

public static class Row 
{ 
    public TextView labelName; 
    public TextView labelPrice; 
    public CheckBox check; 
} 

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

@Override 
public ModifierEntity getItem(int position) { 
    return originalData.get(position); 
} 

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

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


    final int colorFont = activity.getResources().getColor(R.color.brown_tataki); 

    final Row holder; 
    View rowView = convertView; 
    // reuse views 
    if (convertView == null) { 
     holder = new Row(); 
     LayoutInflater inflater = LayoutInflater.from(activity); 
     rowView = inflater.inflate(R.layout.additional_item, null); 
     rowView.setClickable(true); 
     //rowView.setFocusable(false); 
     // configure view holder 


     holder.labelName = (TextView) rowView.findViewById(R.id.additional_name); 
     holder.labelPrice = (TextView) rowView.findViewById(R.id.additional_price); 
     holder.check = (CheckBox) rowView.findViewById(R.id.additional_check); 
     rowView.setTag(holder); 

    } 
    else { 
     holder = (Row) convertView.getTag(); 
     // rowView.setClickable(true); 
    } 
    final ModifierEntity itm = originalData.get(position); 
    holder.labelName.setText(itm.getModifier_name()); 
    holder.labelName.setTypeface(font); 
    holder.labelName.setTextColor(colorFont); 

    holder.labelPrice.setText(GlobalParameters.CURRENCY.concat(String.valueOf(itm.getModifier_cost()))); 
    holder.labelPrice.setTypeface(boldFont); 
    holder.labelPrice.setTextColor(colorFont); 
    return rowView; 
} 

}

這裏我對話

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:focusable="true" 
android:background="@color/white"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/orange_tataki" 
    android:text="@string/additional_title" 
    android:textColor="@color/white" 
    android:textSize="20sp" 
    android:gravity="center" 
    android:id="@+id/title_additional" 
    android:padding="5dp"/> 
<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/title_additional" 
    android:gravity="center" 
    android:background="@color/white" 
    android:layout_marginRight="10dp" 
    android:layout_marginLeft="10dp"> 
    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/list_additional" 
     android:divider="@color/brown_tataki" 
     android:dividerHeight="0.5dp"/> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/list_additional" 
     android:gravity="center" 
     android:padding="10dp" 
     android:visibility="gone" 
     android:textColor="@color/brown_tataki" 
     android:id="@+id/additional_not_found" 
     android:text="@string/additional_not_found"/> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/buttons" 
     android:layout_marginBottom="10dp" 
     android:layout_below="@+id/additional_not_found" 
     android:gravity="center" 
     android:layout_marginTop="20dp"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="10dp" 
      android:id="@+id/button_cancel" 
      android:background="@color/green_tataki" 
      android:text="@string/button_cancel" 
      android:textSize="15sp" 
      /> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/button_accept" 
      android:padding="10dp" 
      android:background="@color/green_tataki" 
      android:text="@string/button_accept" 
      android:textSize="15sp" 
      android:layout_marginLeft="15dp" 
      /> 

    </LinearLayout> 
</RelativeLayout> 

,在這裏我item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:descendantFocusability="blocksDescendants" 
> 

<TextView 
    android:layout_width="150dp" 
    android:layout_height="wrap_content" 
    android:text="QUESO" 
    android:singleLine="true" 
    android:padding="10dp" 
    android:textColor="@color/brown_tataki" 
    android:id="@+id/additional_name"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/additional_price" 
    android:padding="10dp" 
    android:text="Bs. 500" 
    android:textColor="@color/brown_tataki" 
    android:layout_toRightOf="@id/additional_name" 
    android:layout_marginLeft="10dp" 
    /> 

<CheckBox 
    android:id="@+id/additional_check" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_marginLeft="8dp" /> 

+0

這種情況下,如果'(withoutModifiers ){'變成'真'? – giannisf

+0

如果列表爲空並顯示一條消息而不是一個列表......但是它是假我可以用複選框查看我的列表。它的工作原理與我想要的一樣 –

+0

從對話框xml中刪除'android:focusable =「true」'。它必須採取焦點導致列表視圖不迴應。 – Rohit5k2

回答

1

使用接口,我可以解決我的問題,這link爲我提供瞭解決方案,並bassically在於創建一個接口,在我的活動實現。

像這樣:

1.-接口

public interface MyListener { 
    void folderClicked(); 
} 

2:實現在活動

public class ActivityA extends Activity implements MyListener 

接口3.-您將有自動覆蓋的方法folderClicked它看起來像這樣:

@Override 
protected void folderClicked() { 
// Do your stuff here. 
} 

4.-發送活動監聽器適配器構造是這樣的:

MyAdpater adapter = new MyAdpater(ActivityA.this); 

5.-你的適配器類的代碼應該是這樣的:

public class TimeLineAdapter extends BaseAdapter { 
private MyListener mListener; 
public TimeLineAdapter(MyListener listener) { 
    super(); 
    mListener = listener; 
} 

holder.iconImage.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    mListener.onFolderClicked() 
    //code to do stuff when the image is clicked 
}