2012-11-14 8 views
0

텍스트만으로 구성된 앱을 만들려고합니다. 모든 페이지 (xml)가 다릅니다. 이제 사용자가 자신의 즐겨 찾기를 북마크에 추가 할 북마크 페이지를 만들고 싶습니다. 홈 화면의 버튼으로 활성화 된 북마크 페이지를 만들었으며 모든 텍스트 페이지에 북마크 버튼이 있지만 북마크 된 페이지/텍스트를 북마크에 보내거나 표시하는 방법을 알 수 없습니다. 페이지. 이것이 내가 얻은 것입니다. 작동하지 않습니다.즐겨 찾기/즐겨 찾기

package life.quotes; 


/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.page1); 
    cb = (CheckBox)findViewById(R.id.favorites); 
    b = (Button)findViewById(R.id.button_right); 

    Button Page2 = (Button) findViewById(R.id.button_right); 
    Page2.setOnClickListener(new View.OnClickListener() { 
     public void onClick (View view) { 
      Intent myIntent = new Intent(view.getContext(), Page2.class); 
      startActivityForResult(myIntent, 0); 
     } 
    }); 

    cb.setOnClickListener(this); 
} 

private void savePrefs(String key, boolean value){ 
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
    Editor edit= sp.edit(); 
    edit.putBoolean(key, value); 
    edit.commit(); 
} 

private void savePrefs(String key, String value){ 
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
    Editor edit= sp.edit(); 
    edit.putString(key, value); 
    edit.commit(); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    savePrefs("FAVORITES", cb.isChecked()); 
    savePrefs("QUOTE1", getString(R.string.quote1)); 
} 
     ` 

아무도 도와 줄 수 있습니까?

답변

1

글쎄, 모든 페이지가 텍스트 일 ​​뿐인 경우 텍스트 뷰에서 텍스트를 가져 와서 SQLite db에 추가 할 수 있습니다.

다음은 내가 한 앱을 기반으로하는 의미의 예입니다.
DatabaseConnector.java :

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 


public class DatabaseConnector { 

    private static final String DB_NAME = "WorldCountries"; 
    private SQLiteDatabase database; 
    private DatabaseOpenHelper dbOpenHelper; 

    public DatabaseConnector(Context context) { 
      dbOpenHelper = new DatabaseOpenHelper(context, DB_NAME, null, 1); 
    } 

    public void open() throws SQLException { 
     database = dbOpenHelper.getWritableDatabase(); 
    } 

    public void close() { 
     if (database != null) 
     database.close(); 
    }  

    public void insertContact(String name, String cap) { 
     ContentValues newCon = new ContentValues(); 
     newCon.put("name", name); 
     newCon.put("cap", cap); 

     open(); 
     database.insert("country", null, newCon); 
     close(); 
    } 


    public void updateContact(long id, String name, String cap) { 
     ContentValues editCon = new ContentValues(); 
     editCon.put("name", name); 
     editCon.put("cap", cap); 

     open(); 
     database.update("country", editCon, "_id=" + id, null); 
     close(); 
    } 


    public Cursor getAllContacts() { 
     return database.query("country", new String[] {"_id", "name"}, null, null, null, null, "name"); 
    } 

    public Cursor getOneContact(long id) { 
     return database.query("country", null, "_id=" + id, null, null, null, null); 
    } 

    public void deleteContact(long id) { 
     open(); 
     database.delete("country", "_id=" + id, null); 
     close(); 
    } 
} 

DatabaseOpenHelper.java :

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DatabaseOpenHelper extends SQLiteOpenHelper { 

    public DatabaseOpenHelper(Context context, String name, 
      CursorFactory factory, int version) { 
     super(context, name, factory, version); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String createQuery = "CREATE TABLE country (_id integer primary key autoincrement,name, cap);";     
     db.execSQL(createQuery);   
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

} 

이제이 항목의 목록이 포함 된 활동 즐겨 찾기 나 북마크
FavoriteList.java에 추가 :

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.CursorAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.AdapterView.OnItemClickListener; 

public class FavoriteList extends ListActivity { 

    public static final String ROW_ID = "row_id"; 
    private ListView conListView; 
    private CursorAdapter conAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     conListView=getListView(); 
     conListView.setOnItemClickListener(viewConListener); 

     // map each name to a TextView 
    String[] from = new String[] { "name" }; 
    int[] to = new int[] { R.id.countryTextView }; 
    conAdapter = new SimpleCursorAdapter(FavoriteList.this, R.layout.country_list, null, from, to); 
    setListAdapter(conAdapter); // set adapter 
    } 


    @Override 
    protected void onResume() { 
     super.onResume(); 
     new GetContacts().execute((Object[]) null); 
    } 


    @Override 
    protected void onStop() { 
     Cursor cursor = conAdapter.getCursor(); 

     if (cursor != null) 
      cursor.deactivate(); 

     conAdapter.changeCursor(null); 
     super.onStop(); 
    }  


    private class GetContacts extends AsyncTask<Object, Object, Cursor> 
    { 
     DatabaseConnector dbConnector = new DatabaseConnector(FavoriteList.this); 

     @Override 
     protected Cursor doInBackground(Object... params) { 
      dbConnector.open(); 
      return dbConnector.getAllContacts(); 
     } 

     @Override 
     protected void onPostExecute(Cursor result) { 
      conAdapter.changeCursor(result); // set the adapter's Cursor 
      dbConnector.close(); 
     } 
    } 

    OnItemClickListener viewConListener = new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {   
      Intent viewCon = new Intent(FavoriteList.this, ViewFav.class); 
      viewCon.putExtra(ROW_ID, arg3); 
      startActivity(viewCon); 
     } 
    }; 

} 

그리고 이것은 ViewFav.java 데이터베이스
에서 항목을 삭제하는 메뉴 항목, 즐겨 찾기 목록에

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.database.Cursor; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.widget.TextView; 

public class ViewFav extends Activity { 

    private long rowID; 
    private TextView nameTv; 
    private TextView capTv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_fav); 

     setUpViews(); 
     Bundle extras = getIntent().getExtras(); 
     rowID = extras.getLong(FavoriteList.ROW_ID); 
    } 

    private void setUpViews() { 
     nameTv = (TextView) findViewById(R.id.nameText); 
     capTv = (TextView) findViewById(R.id.capText); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     new LoadContacts().execute(rowID); 
    } 

    private class LoadContacts extends AsyncTask<Long, Object, Cursor> { 
     DatabaseConnector dbConnector = new DatabaseConnector(ViewFav.this); 

     @Override 
     protected Cursor doInBackground(Long... params) { 
     dbConnector.open(); 
     return dbConnector.getOneContact(params[0]); 
     } 

     @Override 
     protected void onPostExecute(Cursor result) { 
     super.onPostExecute(result); 

     result.moveToFirst(); 
     int nameIndex = result.getColumnIndex("name"); 
     int capIndex = result.getColumnIndex("cap"); 

     nameTv.setText(result.getString(nameIndex)); 
     capTv.setText(result.getString(capIndex)); 

     result.close(); 
     dbConnector.close(); 
     } 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.view_fav_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.deleteItem: 
      deleteContact(); 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

    private void deleteContact() { 
     AlertDialog.Builder alert = new AlertDialog.Builder(ViewFav.this); 
     alert.setTitle(R.string.confirmTitle); 
     alert.setMessage(R.string.confirmMessage); 
     alert.setPositiveButton(R.string.delete_btn, 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int button) { 
       final DatabaseConnector dbConnector = 
        new DatabaseConnector(ViewFav.this); 

       AsyncTask<Long, Object, Object> deleteTask = 
        new AsyncTask<Long, Object, Object>() { 
        @Override 
        protected Object doInBackground(Long... params) { 
         dbConnector.deleteContact(params[0]); 
         return null; 
        } 

        @Override 
        protected void onPostExecute(Object result) { 
         finish(); 
        } 
        }; 

       deleteTask.execute(new Long[] { rowID });    
      } 
     } 
    ); 

     alert.setNegativeButton(R.string.cancel_btn, null).show(); 
    } 
} 

을 각 항목을 볼 그리고 마지막으로 당신의 활동에 즐겨 찾기 버튼을 착용하는 활동입니다/fragment 에서 즐겨 찾기 버튼을 클릭하면 텍스트 뷰의 내용이 데이터베이스에 항목으로 추가됩니다.이 경우 데이터베이스에는

private long rowID; 
    private TextView nameEt; 
    private TextView capEt; 

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

     nameEt = (TextView) findViewById(R.id.textView1); 
     capEt = (TextView) findViewById(R.id.textView2); 

     //other stuff in OnCreate ...... 
    } 

    private MenuItem itemfav; 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     itemfav = menu.add(0, 10, 10, "Favorite"); 
     itemfav.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
     return super.onCreateOptionsMenu(menu); 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     switch (item.getItemId()) { 
      case 10: 
       fav(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 

    } 

    private void fav() { 
     AsyncTask<Object, Object, Object> saveContactTask = 
        new AsyncTask<Object, Object, Object>() 
        { 
         @Override 
         protected Object doInBackground(Object... params) 
         { 
         saveContact(); 
         return null; 
         } 

         @Override 
         protected void onPostExecute(Object result) 
         { 
         Toast.makeText(Button2.this, "Item has been added to favorites", Toast.LENGTH_SHORT).show(); 
         } 
        }; 

       saveContactTask.execute((Object[]) null); 
    } 

    private void saveContact() 
     { 
      DatabaseConnector dbConnector = new DatabaseConnector(this); 
       dbConnector.insertContact(nameEt.getText().toString(),capEt.getText().toString()); 

     }