2014-02-28 37 views
0

我有一個使用SimpleAdapter生成的Listview。當我點擊一行時,我的列表視圖顯示另一個列表視圖。我已將ImageView放入適配器中。我想讓ImageView可點擊來更改ImageView的圖片。任何人都可以告訴我該怎麼做? 我張貼我的代碼如下:如何使用SimpleAdapter在ListView中創建ImageView Clickable?

public View onCreateView(LayoutInflater inflater1, ViewGroup container, 
      Bundle savedInstanceState) { 

    View rootView = inflater1.inflate(R.layout.listview_header_row, container, false); 
    final ImageView im=(ImageView)rootView.findViewById(R.id.imageView1); 
    SharedPreferences pref = getActivity().getPreferences(0); 
    final String id = pref.getString("mynumber", "empty"); 
    Databasehandler db=new Databasehandler(getActivity().getApplicationContext()); 
    final ListView l=(ListView) rootView.findViewById(R.id.listViewad); 
    val=db.getTaskSent(id); 
    ListAdapter k=new SimpleAdapter(getActivity(),val,R.layout.r,new String[]{"TaskId","heading"},new int[]{R.id.textViews,R.id.textViews1}); 
    l.setAdapter(k); 

    im.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getActivity(), "json", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    l.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       TextView tv2=(TextView) arg1.findViewById(R.id.textViews); 
       String t=tv2.getText().toString(); 
       Intent i4=new Intent(getActivity(),SentTaskOnclick.class); 
       i4.putExtra("taskId",t); 
       startActivity(i4); 
      } 
    }); 

回答

0

我會分享一些我的代碼,我想你可以有一個想法,你的問題。 您還可以下載並測試自己的代碼:https://github.com/lpbaptista/Party-Monsters

這是我管理的點擊改變圖像的顏色(我只需要設置的圖片是在灰度在這個例子中)

我的手機類

公共類CategoryCell擴展的RelativeLayout實現OnClickListener {

private Category category; 
private ImageView icon; 
private boolean selected = true; 

public CategoryCell(Context context, AttributeSet attrs) { 
    super(context,attrs); 
    LayoutInflater.from(getContext()).inflate(R.layout.category_cell, this, true); 
    setOnClickListener(this); 
} 

public void init(Category category){ 
    this.category = category; 
    icon = (ImageView)findViewById(R.id.category_icon); 
    icon.setImageDrawable(category.getIcon(getContext())); 
    icon.getDrawable().clearColorFilter(); 
    if(isSelected()) 
     GlobalState.getInstance().addCategory(category); 
} 

public CategoryCell(Context context) { 
    this(context,null); 
} 

@Override 
public void onClick(View v) { 
    setSelected(!isSelected()); 
} 

public boolean isSelected() { 
    return selected; 
} 

public void setSelected(boolean selected) { 
    if(category==null) 
     return; 
    this.selected = selected; 
    if(!isSelected()){ 
     ColorMatrix matrix = new ColorMatrix(); 
     matrix.setSaturation(0); 
     ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); 
     icon.getDrawable().setColorFilter(filter); 
     icon.invalidate(); 
     GlobalState.getInstance().removeCategory(category); 
    }else{ 
     GlobalState.getInstance().addCategory(category); 
     icon.getDrawable().clearColorFilter(); 
     icon.invalidate(); 
    } 
} 

public Category getCategory() { 
    return category; 
} 

}

在這裏,你可以看看我行類,我剛纔添加的細胞對我的看法

public class CategoryRow extends LinearLayout { 

private LinearLayout root; 
private Map<Category,CategoryCell> cells = new HashMap<Category, CategoryCell>(); 


public CategoryRow(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    root = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.category_row, this, true); 
} 

public CategoryRow(Context context) { 
    super(context); 
    root = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.category_row, this, true); 
} 

public static CategoryRow create(ViewGroup parent, LayoutInflater inflater) { 
    final CategoryRow view = new CategoryRow(parent.getContext()); 
    return view; 
} 

public void init(Type type, List<Category> cells) { 
    LinearLayout ll = (LinearLayout)root.getChildAt(0); 
    for(int i = 0;i<cells.size();i++) { 
     CategoryCell cell = ((CategoryCell)ll.getChildAt(i)); 
     cell.init(cells.get(i)); 
     this.cells.put(cells.get(i),cell); 
    } 
} 

public Map<Category,CategoryCell> getCells() { 
    return cells; 
} 

} 

最後名單代碼:

public class CategoryList extends ListView { 

private List<List<Category>> categories = new ArrayList<List<Category>>(); 
private Map<Category,CategoryCell> cells = new HashMap<Category, CategoryCell>(); 
private Type type; 

public CategoryList(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setBackgroundColor(getResources().getColor(R.color.wet_asphalt)); 
    setDivider(null); 
    setVerticalFadingEdgeEnabled(false); 
    setVerticalScrollBarEnabled(false); 
    setHorizontalScrollBarEnabled(false); 
    Utils.changeRoundedCornersColor(this, R.color.carrot,false); 
    if(isInEditMode()) 
     init(Type.BAR); 
} 

public void init(Type type){ 
    this.type = type; 
    categories.clear(); 
    if(getAdapter()!=null) 
     ((CategoryAdapter)getAdapter()).notifyDataSetChanged(); 
    setAdapter(null); 
    categories = loadCells(); 
    setAdapter(new CategoryAdapter()); 
    ((CategoryAdapter)getAdapter()).notifyDataSetChanged(); 
} 

private List<List<Category>> loadCells() { 
    List<List<Category>> cells = new ArrayList<List<Category>>(); 
    int rowLimitCounter = 0; 
    ArrayList<Category> categoryCells = null; 
    Category[] categories = Category.values(); 
    for(int i = 0;i<categories.length;i++){ 
     if(rowLimitCounter==0) 
      categoryCells = new ArrayList<Category>(); 
     categoryCells.add(categories[i]); 
     rowLimitCounter++; 
     if(rowLimitCounter>3 || i == (categories.length-1)){ 
      cells.add(categoryCells); 
      rowLimitCounter=0; 
     } 
    } 
    return cells; 
} 

private class CategoryAdapter extends BaseAdapter{ 

    private final LayoutInflater inflater; 

    public CategoryAdapter() { 
     inflater = LayoutInflater.from(getContext()); 
    } 

    @Override 
    public boolean isEnabled(int position) { 
     return false; 
    } 

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

    @Override 
    public List<Category> getItem(int position) { 
     return categories.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     CategoryRow row = (CategoryRow) convertView; 
     if (row == null) { 
      row = CategoryRow.create(parent, inflater); 
     } 
     row.init(type, categories.get(position)); 
     cells.putAll(row.getCells()); 
     return row; 
    } 
} 
} 

如果您對此有什麼疑問就問,我會盡力幫助

相關問題