sqlite数据库的更改名称

问题描述 投票:2回答:1

我正在一个程序中,我想在其中创建多个SQLite数据库。我编写了一个活动,用户可以在其中选择数据库的名称,但是我无法将名称发送给打开数据库的活动。

我一直在从《大书呆子牧场指南》中学习Android编程,并且由于我想存储项目列表,因此我从该书中的criminalIntent程序开始。

要选择SQLite数据库的名称,我创建了另一个数据库,其中包含数据库名称列表。用户按下按钮以选择名称,但是随后我想在另一个活动中使用该名称打开SQLite数据库。

我的方法如下:(消息末尾显示的代码)用户在DataSetListFragment中选择SQLite数据库的名称,然后在InstructLab中打开该数据库(这与CrimeIntent中的CrimeLab几乎相同)。我声明了一个变量sScheduleName,它是SQLite数据库的名称。首先,在DataSetListFragment中,我尝试使用InstructLab setter方法分配数据库名称。然后,当我创建InstructLab的实例时,sScheduleName为null。

我尝试了其他想法。我使用putExtra将数据库的名称返回给Main Activity。用户从MainActivity中选择另一个活动,该活动将列出在putExtra中返回的名称的SQLite数据库的内容。但是,在使用SQLite数据库名称之前,有几层代码,而且我不知道如何使用putExtra发送名称,然后在需要的代码位置检索它。

我不太确定采取什么方法,以便在打开数据库时可以从DataSetListFragment到InstructLab实例获取有关数据库名称的信息,所以有人可以向我指出正确的方向吗?

谢谢。

公共类DataSetListFragment扩展Fragment {

private String mCurrentFile;

    public DataSetHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        mTitleTextView = (TextView) itemView.findViewById(R.id.list_item_dataset_info);
        mNameButton = (Button) itemView.findViewById(R.id.choose_schedule_name);
        mNameButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
              Intent intent = new Intent();
                DataSetLab.get(getActivity()).setCurrentData(mTitleTextView.getText().toString());
                InstructLab.get(getActivity()).setScheduleName(mTitleTextView.getText().toString());
                Log.d(TAG, "send back to MainActivity: "+mTitleTextView.getText().toString());
                intent.putExtra(EXTRA_NAME,mTitleTextView.getText().toString());
                getActivity().setResult(Activity.RESULT_OK,intent);
                getActivity().finish();

            }
        });
    }

}

公共类InstructLab {私有静态InstructLab sInstructLab;

private Context mContext;
private SQLiteDatabase mDatabase;
private static String sScheduleName;

public String getScheduleName() {
    return sScheduleName;
}

public void setScheduleName(String scheduleName) {
    this.sScheduleName = scheduleName;
    Log.d(TAG,"Assigning database name:"+sScheduleName);
}



public static InstructLab get(Context context) {
    if (sInstructLab == null) {

        sInstructLab = new InstructLab(context);
    }
    return sInstructLab;
}

private InstructLab(Context context) {
    mContext = context.getApplicationContext();
    Log.d(TAG,"Opening Database "+sScheduleName);
    mDatabase = new InstructBaseHelper(mContext,sScheduleName).getWritableDatabase();
    Log.d(TAG,"Opening Database "+sScheduleName);
}
android android-sqlite instance-variables
1个回答
0
投票

片段是Activity上的一个视图组,您不需要使用setresult来更新您的Activity。您可以只使用一个接口来与Activity通信。

public class DataSetListFragment extends Fragment {

    private String mCurrentFile;

    public DataSetHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        mTitleTextView = (TextView) itemView.findViewById(R.id.list_item_dataset_info);
        mNameButton = (Button) itemView.findViewById(R.id.choose_schedule_name);
        mNameButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {                
                ((YourActivity)getActivity()).onDataSetLab(DataSetLab.get(getActivity()).setCurrentData(mTitleTextView.getText().toString()));
                ((YourActivity)getActivity()).onInstructLab(InstructLab.get(getActivity()).setScheduleName(mTitleTextView.getText().toString()));              

            }
        });
    }

    public interface  DBNameListener {
        public void onDataSetLab(String name);
        public void onInstructLab(String name);
    }

}

然后,在您的活动中,仅实现DBNameListener,

public class YourActivity extends Activity implements DatasetListFragment.DBNameListener {

@Override
public void onDataSetLab(String name) {
 // do your stuff 
}

@Override
public void onInstructLab(String name) {
 // do your stuff 
}
}
© www.soinside.com 2019 - 2024. All rights reserved.