2013-07-22 2 views
0

내 프로젝트에 customlistview 어댑터를 사용하는 사용자 지정 listview가 있습니다. 모든 행에는 체크 박스가 있습니다 - 어떤 체크 박스에 체크 표시가 있으면 컨텍스트 메뉴 (actionMode)가 표시되기를 원합니다. 그러나 나는 CustomListViewAdapter에 액션 모드를 구현하는 방법을 전혀 모른다.CustomListView 어댑터의 ActionMode (ActionBarSherlock)

내가 읽은 모든 튜토리얼은 일반적인 MainActivity에 actionMode를 구현하는 것에 관한 것이었지만 customReview 어댑터에 구현하는 방법에 대해서는 아무도 설명하지 않았다. 그게 가능하지 않니?

추신 : 나는 ActionBarSherlock 라이브러리를 사용하고 있습니다.

실제로 파일 탐색기를 만드는 데 자주 사용되는 listview를 만들고 싶습니다. 당신이 actionmode가 표시되는 항목의 확인란을 선택하고 할 경우에는 옵션 (다운로드, 삭제, 이동, ..)

을 선택 .. :: 여기 내 코드 :: ..이

MainActivity.java입니다

public class MainActivity extends Activity { 
    private ListView listview; 
    private Button button; 

    private List<Item> itemList; 
    private CustomListViewAdapter adapter; 

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

     listview = (ListView) findViewById(R.id.listView1); 
     button = (Button) findViewById(R.id.button1); 

     button.setOnClickListener(listener); 
     listview.setOnItemClickListener(itemListener); 

     itemList = new ArrayList<Item>(); 

     for(int i=1; i <= 20; i++) { 
      Item item = new Item(R.drawable.ic_launcher, "Line " + String.valueOf(i), false); 
      itemList.add(item); 
     } 

     adapter = new CustomListViewAdapter(this, R.layout.row, itemList); 
     listview.setAdapter(adapter); 
    } 

    private OnClickListener listener = new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      ArrayList<String> checkedList = new ArrayList<String>(); 

      for(int i=0; i < itemList.size(); i++) { 
       Item item = adapter.getItem(i); 

       if(item.getChecked() == true) { 
        checkedList.add(String.valueOf(item.getFile())); 
       } 
      } 

      String output = ""; 
      for(int i=0; i < checkedList.size(); i++) { 
       output += checkedList.get(i) + "\n"; 
      } 

      if(!output.equals("")) { 
       Toast.makeText(MainActivity.this, output, Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 

    private OnItemClickListener itemListener = new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Item item = adapter.getItem(position); 
      Toast.makeText(MainActivity.this, item.getFile(), Toast.LENGTH_SHORT).show(); 
     } 
    }; 
} 

Item.java

public class Item { 
    private int imageID; 
    private String file; 
    private boolean checked; 

    public Item() { 

    } 

    public Item(int imageID) { 
     this.imageID = imageID; 
    } 

    public Item(int imageID, String file) { 
     this.imageID = imageID; 
     this.file = file; 
    } 

    public Item(int imageID, String file, boolean checked) { 
     this.imageID = imageID; 
     this.file = file; 
     this.checked = checked; 
    } 

    public int getImageID() { 
     return imageID; 
    } 

    public void setImageID(int imageID) { 
     this.imageID = imageID; 
    } 

    public String getFile() { 
     return file; 
    } 

    public void setFile(String file) { 
     this.file = file; 
    } 

    public boolean getChecked() { 
     return checked; 
    } 

    public void setChecked(boolean checked) { 
     this.checked = checked; 
    } 
} 

구리 stomListViewAdapter.java

public class CustomListViewAdapter extends ArrayAdapter<Item> { 

    private Context context; 

    public CustomListViewAdapter(Context context, int resourceID, List<Item> items) { 
     super(context, resourceID, items); 
     this.context = context; 
    } 

    private class ViewHolder { 
     ImageView imageview; 
     TextView textview; 
     CheckBox checkbox; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     Item item = (Item) getItem(position); 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

     if(convertView == null) { 
      convertView = inflater.inflate(R.layout.row, null); 
      holder = new ViewHolder(); 
      holder.imageview = (ImageView) convertView.findViewById(R.id.imageView1); 
      holder.textview = (TextView) convertView.findViewById(R.id.textView1); 
      holder.checkbox = (CheckBox) convertView.findViewById(R.id.checkBox1); 
      convertView.setTag(holder); 

      holder.checkbox.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        CheckBox checkbox = (CheckBox) view; 
        Item item = (Item) checkbox.getTag(); 
        item.setChecked(checkbox.isChecked()); 
       } 
      }); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.checkbox.setTag(item); 

     holder.imageview.setImageResource(item.getImageID()); 
     holder.textview.setText(item.getFile()); 
     holder.checkbox.setChecked(item.getChecked()); 

     return convertView; 
    } 
} 

답변

0

나는 그것을 가지고있다.

) 그것 뿐이다

 holder.checkbox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       CheckBox checkbox = (CheckBox) view; 
       Item item = (Item) checkbox.getTag(); 
       item.setChecked(checkbox.isChecked()); 

       boolean checked = false; 
       for(int i=0; i < items.size(); i++) { 
        Item temp = items.get(i); 

        if(temp.getChecked() == true) { 
         checked = true; 
        } 
       } 

       if(checked) { 
        if(MainActivity.actionModeCheck == false) { 
         ((MainActivity) context).showActionMode(); 
        } 
       } 
       else { 
        if(MainActivity.actionModeCheck == true) { 
         ((MainActivity) context).closeActionMode(); 
        } 
       } 
      } 
     }); 

을 다음과 같이 ..

public void showActionMode() { 
    actionMode = startActionMode(new AnActionModeOfEpicProportions()); 
} 

public void closeActionMode() { 
    actionMode.finish(); 
} 

private final class AnActionModeOfEpicProportions implements ActionMode.Callback { 
    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 

     menu.add("Download") 
      .setTitle("Download") 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

     menu.add("Move") 
      .setTitle("Move") 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

     menu.add("Delete") 
      .setTitle("Delete") 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

     menu.add("Select all") 
      .setTitle("Select all") 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

     menu.add("Unselect all") 
      .setTitle("Unselect all") 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

     return true; 
    } 

    @Override 
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
     return false; 
    } 

    @Override 
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
     Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show(); 
     mode.finish(); 
     return true; 
    } 

    @Override 
    public void onDestroyActionMode(ActionMode mode) { 

    } 
} 

CustomListViewAdapterCheckboxonClickListener() 편집 :

그냥이 methods 및 MainActivity에 private class 추가