我想将一个特定的文件名从simplecursoradapter返回到调用它的活动。 我尝试了此链接How communicate between Adapter and Activity以及此Data between activity and adapter 但要么没有帮助我。我在这里发布了活动代码和适配器代码。亲自帮助
Activity
videolist = (ListView) findViewById(R.id.VideoMusicList);
videolist.setAdapter(adapter);
//适配器
public class SdCardAdapter extends SimpleCursorAdapter {
static final String TAG = "[SongListAdapter]";
int position;
CheckBox media_selected;
final String SETTING_TODOLIST = "todolist";
private String chk;
private Context context;
private Object itemText;
private ArrayList<string> selectedItems = new ArrayList<string>();
// String file;
private Object convertView;
// private final List<Model> list;
int count;
ListView listview;
private List<Model> list;
private Cursor videocursor;
private LayoutInflater mInflater;
private OnClickListener mClick;
private OnCheckedChangeListener mChecked;
String file_rel_path;
String file_abs_path;
String last_file;
/**
* The Class ViewHolder.
*/
static class ViewHolder {
/** The sdcard_item. Layout of each item in the list view */
RelativeLayout sdcard_item;
LinearLayout sdcard;
/** The title. Textview to display the song title */
TextView media_name;
CheckBox media_selected;
ListView listview;
int position;
}
public SdCardAdapter(Context context, int layout, Cursor c, String[] from,
int[] to) {
super(context, layout, c, from, to);
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View v = super.newView(context, cursor, parent);
final Cursor filecursor = cursor;
final ViewHolder vh = new ViewHolder();
vh.media_name = (TextView) v.findViewById(R.id.sdcard_title);
position = cursor.getPosition();
count = cursor.getCount();
vh.media_selected = (CheckBox) v.findViewById(R.id.sdcard_checkbox);
vh.media_selected
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
System.out.println("checkbox ckicked......");
if (vh.media_selected.isChecked()) {
vh.media_selected.setId(1);
vh.media_selected.getId();
last_file = file_rel_path;
file_rel_path = vh.media_name.getText().toString();
Log.d("filename_........", file_rel_path);
v.setBackgroundColor(Color.GRAY);
} else if (!vh.media_selected.isChecked()) {
file_rel_path="";
vh.media_selected.setId(0);
vh.media_selected.getId();
v.setBackgroundColor(Color.BLACK);
}
Log.d("Position", "" + position);
for (int i = 0; i < count; i++) {
filecursor.moveToPosition(i);
file_abs_path = filecursor.getString(filecursor
.getColumnIndex(MediaStore.Video.Media.TITLE));
if (file_abs_path.equals(file_rel_path)) {
String file_path = filecursor.getString(filecursor
.getColumnIndex(MediaStore.Video.Media.DATA));
Log.d("filename.......", file_path);
}
}
}
});
vh.sdcard_item = (RelativeLayout) v.findViewById(R.id.sdcard_item);
v.setTag(vh);
return v;
}
}
//这是我想传递给我之前活动的字符串
String file_path = filecursor.getString(filecursor.getColumnIndex(MediaStore.Video.Media.DATA));
答案 0 :(得分:1)
使用interface callBack:
在SdCardAdapter类中创建界面:
public interface SdCardAdapterListener
{
public void sendFilePath(String path);
}
在SdCardAdapter构造函数中添加一个侦听器参数:
private SdCardAdapterListener delegate;
public SdCardAdapter(Context context, int layout, Cursor c, String[] from,
int[] to, SdCardAdapterListener delegate)
{
super(context, layout, c, from, to);
this.delegate = delegate;
}
活动:
SdCardAdapter adapter = new SdCardAdapter(this, layout, c, from, to, new SdCardAdapterListener()
{
@Override
public void sendFilePath(String path)
{
// do something with path
}
});
videolist = (ListView) findViewById(R.id.VideoMusicList);
videolist.setAdapter(adapter);
然后,只需在SdCardAdapter中调用delegate.sendFilePath(path),即可在Activity中发送sendFilePath方法。