Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击“收藏夹”按钮时更新列表视图_Android_Sqlite_Listview_Notifydatasetchanged - Fatal编程技术网

Android 单击“收藏夹”按钮时更新列表视图

Android 单击“收藏夹”按钮时更新列表视图,android,sqlite,listview,notifydatasetchanged,Android,Sqlite,Listview,Notifydatasetchanged,我希望在类ListViewAdapter中单击按钮btn时,更新我的sqlite并更改btn的背景,当MainActivity开始并首先单击按钮时,是正确的。但当我滚动列表时,btn的背景会恢复到其原始状态,此外,当再次单击按钮时,不会进行任何更改。 换句话说,不要更新我的listview。如何解决这个问题 在何处以及如何使用adapter.notifyDataSetChanged() 单击列表视图适配器后?如何在我的ListViewAdapterMyActivity上获取适配器 public

我希望在类
ListViewAdapter
中单击按钮
btn
时,更新我的sqlite并更改btn的
背景,当MainActivity开始并首先单击按钮时,是正确的。但当我滚动列表时,btn的背景会恢复到其原始状态,此外,当再次单击按钮时,不会进行任何更改。
换句话说,不要更新我的listview。如何解决这个问题

在何处以及如何使用
adapter.notifyDataSetChanged()

单击
列表视图适配器后
?如何在我的
ListViewAdapter
MyActivity上获取
适配器

public class ListViewAdapter extends BaseAdapter {

// Declare Variables
Context mContext;
LayoutInflater inflater;
private List<myitems> worldpopulationlist = null;
private ArrayList<myitems> arraylist;
int myfavorit =0;
DataBaseHelper myDbHelper;
SQLiteDatabase db;
Cursor mCursor;

public ListViewAdapter(Context context, List<myitems> worldpopulationlist) {
    mContext = context;
    this.worldpopulationlist = worldpopulationlist;
    inflater = LayoutInflater.from(mContext);
    this.arraylist = new ArrayList<myitems>();
    this.arraylist.addAll(worldpopulationlist);
}

public class ViewHolder {
    TextView rank;
    TextView country;
    TextView population;
    Button btn;

}

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

@Override
public myitems getItem(int position) {
    return worldpopulationlist.get(position);
}

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

public View getView(final int position, View view, ViewGroup parent) {
    final ViewHolder holder;
    if (view == null) {
        holder = new ViewHolder();

    view = inflater.inflate(R.layout.myitems_list, null);
        // Locate the TextViews in listview_item.xml
        holder.rank = (TextView) view.findViewById(R.id.txt25);
        holder.btn=(Button) view.findViewById(R.id.btnfavor);
        holder.country = (TextView) view.findViewById(R.id.txt26);


        view.setTag(holder);
    } else {
        holder = (ViewHolder) view.getTag();
    }

    holder.rank.setText(worldpopulationlist.get(position).gettitle());
    holder.country.setText(worldpopulationlist.get(position).getshomare()+"-");

    myfavorit=worldpopulationlist.get(position).getfavoir();


    if(myfavorit==0){
        holder.btn.setBackgroundResource(R.drawable.ic_launcher);
    }

    else{
        holder.btn.setBackgroundResource(R.drawable.star);

    }




    holder.btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            myDbHelper = new DataBaseHelper(mContext.getApplicationContext());
            myDbHelper = new DataBaseHelper(mContext);

            try {
                myDbHelper.createDataBase();}                   

            catch (IOException ioe) {
                throw new Error("Unable to create database");
                    }
            try {myDbHelper.openDataBase();}        
            catch (SQLException sqle) {sqle.printStackTrace();

            }

            String rr=worldpopulationlist.get(position).getprimaryid();
            db = myDbHelper.getWritableDatabase();

        switch (worldpopulationlist.get(position).getfavoir()) {
        case 0:

                mCursor= db.rawQuery("UPDATE khotbe SET favorites = 1 WHERE my_id ="+rr+"  ;",null);
                mCursor.moveToFirst();
                holder.btn.setBackgroundResource(R.drawable.star);              
                Toast.makeText(mContext, "به لیست علاقه مندی ها اضافه شد", Toast.LENGTH_SHORT).show();

            break;
            case 1:
                mCursor= db.rawQuery("UPDATE khotbe SET favorites = 0 WHERE my_id ="+rr+"  ;",null);
                mCursor.moveToFirst();
                holder.btn.setBackgroundResource(R.drawable.ic_launcher);
                Toast.makeText(mContext, "از لیست علاقه مندی های حذف گردید", Toast.LENGTH_SHORT).show();
                break;

        default:
            break;
        }

        }
    });
和主要活动

public class towkhotbe extends ActionBarActivity   {
    DataBaseHelper myDbHelper;

    ListView mylist;
    ArrayList<String> iran,arr_intityid,arrshomare,primarykeyarrlist;
    String[] fa,mysid,myshomare,primarykeyarr;
    SQLiteDatabase db;
    Cursor mCursor;
    int translate;
    EditText mysearch;
    int [] favorit;



    ArrayList<Integer> favor;

    ListViewAdapter adapter;


    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    @SuppressWarnings("deprecation")
    private ActionBarDrawerToggle mDrawerToggle;
    private CharSequence mDrawerTitle;
    private CharSequence mTitle;
    android.support.v7.app.ActionBar actionbar;
    private ArrayList<NavDrawerItem> navDrawerItems;
    private NavDrawerListAdapter sadapter;


    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tow_khotbe);


            Intent myintent=getIntent();
            translate=myintent.getExtras().getInt("translate");

        mylist=(ListView)findViewById(R.id.mylist);
        mysearch=(EditText)findViewById(R.id.edtxtsearch);

        iran=new ArrayList<String>();
        arr_intityid=new ArrayList<String>();
        arrshomare=new ArrayList<String>();
        primarykeyarrlist=new ArrayList<String>();
        favor=new ArrayList<Integer>();


    }


    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        myDbHelper = new DataBaseHelper(this.getApplicationContext());
        myDbHelper = new DataBaseHelper(this);

        try {

            myDbHelper.createDataBase();
        //  contentLog.append("Database Created\n");
        }                   

        catch (IOException ioe) {
            throw new Error("Unable to create database");
                }


        try {
                                myDbHelper.openDataBase();

        }       


        catch (SQLException sqle) {

            sqle.printStackTrace();

        }

        ArrayList<myitems> arraylist = new ArrayList<myitems>();
        db = myDbHelper.getReadableDatabase();

        mCursor= db.rawQuery("SELECT field_translation_id_value,title,translate,my_id,favorites  FROM khotbe"
                + " WHERE translate ="+translate+" ORDER BY field_translation_id_value ASC   ;",null);

        int i = 1;

        mCursor.moveToFirst();

        while (mCursor.isAfterLast() == false) {

    //  contentLog.append("(" + i++ + ")\t\t" + mCursor.getString(1) + "\n");

            iran.add(mCursor.getString(1));
            arr_intityid.add(mCursor.getString(0));
            primarykeyarrlist.add(mCursor.getString(3));
            favor.add(mCursor.getInt(4));
            arrshomare.add(""+i++);
            mCursor.moveToNext();

    }

         fa= new String [iran.size()];
         fa=iran.toArray(fa);

           mysid= new String [arr_intityid.size()];                     
           mysid=arr_intityid.toArray(mysid);

           primarykeyarr= new String [primarykeyarrlist.size()];                        
           primarykeyarr=primarykeyarrlist.toArray(primarykeyarr);



           myshomare=new String[arrshomare.size()];
           myshomare=arrshomare.toArray(myshomare);

           favorit =new int[favor.size()];
           for (int t= 0; t < favor.size(); t++) {

               favorit[t]=favor.get(t).intValue();

        }

           mCursor.moveToPosition(0);
         for (int j = 0; j < fa.length; j++) {

               myitems qqq= new myitems(fa[j],mysid[j],myshomare[j],primarykeyarr[j],favorit[j]);

               arraylist.add(qqq);

           }

           adapter=new ListViewAdapter(this, arraylist);
           mylist.setAdapter(adapter);


           Button btn=(Button)findViewById(R.id.btnfavor);
           btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(towkhotbe.this, "11111111", Toast.LENGTH_SHORT).show();

            }
        });



    }
公共类towkhotbe扩展了ActionBarActivity{
数据库助手myDbHelper;
列表视图mylist;
ArrayList iran、arr_intityid、arrshomare、primarykeyarrlist;
字符串[]fa,mysid,myshomare,primarykeyarr;
sqlitedb数据库;
光标mCursor;
int翻译;
编辑文本我的研究;
int[]喜欢它;
偏袒;
ListViewAdapter适配器;
私人抽屉布局mDrawerLayout;
私有列表视图mDrawerList;
@抑制警告(“弃用”)
私有操作bardrawertoggle mDrawerToggle;
私有字符序列mDrawerTitle;
私有字符序列mTitle;
android.support.v7.app.ActionBar ActionBar;
私人ArrayList NavWrites;
私人导航适配器;
@SuppressLint(“新API”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.tow_khotbe);
Intent myintent=getIntent();
translate=myintent.getExtras().getInt(“translate”);
mylist=(ListView)findViewById(R.id.mylist);
mysearch=(EditText)findViewById(R.id.edtxtsearch);
伊朗=新ArrayList();
arr_inityId=新的ArrayList();
arrshomare=newarraylist();
primarykeyarrlist=新ArrayList();
偏好=新的ArrayList();
}
@凌驾
受保护的void onResume(){
//TODO自动生成的方法存根
super.onResume();
myDbHelper=newDatabaseHelper(this.getApplicationContext());
myDbHelper=新的DataBaseHelper(此);
试一试{
myDbHelper.createDataBase();
//append(“创建的数据库”);
}                   
捕获(ioe异常ioe){
抛出新错误(“无法创建数据库”);
}
试一试{
myDbHelper.openDataBase();
}       
捕获(SQLException sqle){
printStackTrace();
}
ArrayList ArrayList=新的ArrayList();
db=myDbHelper.getReadableDatabase();
mCursor=db.rawQuery(“选择字段\翻译\ id \值、标题、翻译、我的id、霍特比的收藏夹”
+“其中translate=“+translate+”按字段顺序\u translate\u id\u value ASC;”,null);
int i=1;
mCursor.moveToFirst();
while(mCursor.isAfterLast()==false){
//contentLog.append(“(“+i++”)\t\t“+mCursor.getString(1)+“\n”);
添加(mCursor.getString(1));
arr_inityId.add(mCursor.getString(0));
添加(mCursor.getString(3));
add(mCursor.getInt(4));
arrshomare.add(“+i++”);
mCursor.moveToNext();
}
fa=新字符串[iran.size()];
fa=伊朗toArray(fa);
mysid=新字符串[arr_inityId.size()];
mysid=arr_inityid.toArray(mysid);
primarykeyarr=新字符串[primarykeyarrlist.size()];
primarykeyarr=primarykeyarrlist.toArray(primarykeyarr);
myshomare=新字符串[arrshomare.size()];
myshomare=arrshomare.toArray(myshomare);
favorit=newint[fovorit.size()];
for(int t=0;t
在您喜爱的按钮的
onClick()中使用
适配器。notifyDataSetChanged();

示例

Button favoriteButton = (Button) findViewById(R.id.bFavButton);
favoriteButton.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view){
        //Add or remove items to list
        ..............

        //Hey, adapter! Data set updated!
        adapter.notifyDataSetChanged();
    }
});

使用notifyDatasetChangedmethod@Nilesh可以进一步解释@Shifar Shifz如何将MainActivity中的适配器获取到ListViewAdapter?您可以在
Activity
中的方法外部声明
ListViewAdapter
,并且可以从类中的任何位置调用。当我在MainActivity中使用onclick时,您必须阅读此@Shifar Shifzpp未运行,但onclick in ListViewAdapter正常。为什么?我认为您的按钮的
onclick()
。发布完整的活动。@Shifar Shifz我必须更改主活动,请重新查看
Button favoriteButton = (Button) findViewById(R.id.bFavButton);
favoriteButton.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view){
        //Add or remove items to list
        ..............

        //Hey, adapter! Data set updated!
        adapter.notifyDataSetChanged();
    }
});