Android 将文件名从SimpleCursorAdapter返回到“活动”

Android 将文件名从SimpleCursorAdapter返回到“活动”,android,Android,我想将一个特定的文件名从simplecursoradapter返回到调用它的活动。 我尝试了这个链接,也尝试了这个链接 但这两者都没有帮助我。我在这里发布活动代码和适配器代码。请帮忙 Activity videolist = (ListView) findViewById(R.id.VideoMusicList); videolist.setAdapter(adapter); //适配器 public class SdCardAdapter extends SimpleCurs

我想将一个特定的文件名从simplecursoradapter返回到调用它的活动。 我尝试了这个链接,也尝试了这个链接 但这两者都没有帮助我。我在这里发布活动代码和适配器代码。请帮忙

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;

}
}

使用接口回调:

在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),以便在活动中发送到sendFilePath方法。

您不能将其存储在SdCardAdapter的静态变量中,然后在活动中检索它吗?如果您将
delegate
存储在构造函数中的SdCardAdapter成员中,那么这是一种很好且干净的方法。
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);