2016-09-05 11 views
0

SIGNUPページからフェッチした詳細を追加し、すべてのSIGNUP情報をリストに表示する必要があるリストビューを作成しようとしています。 これに加えて、必要に応じてリストから項目を削除できるボタン「REMOVE」を追加する必要があります。だから、私はすべてのリスト項目の前にボタンが必要です。カスタムカーソルクラスを使用してListViewに削除ボタンを追加する

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.hsports.signuppage.MainActivity" 
    android:orientation="vertical" 
android:background="@color/WHITE" 

    > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Shaadi Mubarak" 
     android:textSize="30dp" 
     android:textColor="@color/RED" 
     android:layout_gravity="center" 
     android:id="@+id/TitleText" 


     /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="It is a company which aims at bringing people together and it's just a way to make this thing easier." 
     android:textSize="15dp" 
     android:textColor="@color/BLACK" 
     android:textAlignment="center" 
     android:paddingBottom="100dp" 
     android:id="@+id/Title" 
     android:ellipsize="marquee" 
     android:fadingEdge="horizontal" 
     android:marqueeRepeatLimit="marquee_forever" 
     android:scrollHorizontally="true" 
     android:lines="1" 
     android:singleLine="true" 

     /> 


<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:gravity="center_horizontal" 


    > 

     <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/name" 
      android:layout_gravity="center_horizontal" 
      android:hint="Enter your Name" 

      android:gravity="center_horizontal" 

      android:imeOptions="actionGo" 
      android:textColor="@color/BLACK" 

      /> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textEmailAddress" 

      android:id="@+id/emailId" 
      android:hint="Enter your Email Id" 
      android:gravity="center_horizontal" 
      /> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textPassword" 
      android:ems="10" 
      android:id="@+id/password" 
      android:hint="Enter Password" 
      android:gravity="center_horizontal" 
      /> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textPassword" 
      android:ems="10" 
      android:id="@+id/cnfpassword" 
      android:hint="Confirm your password" 
      android:gravity="center_horizontal" 
      /> 

     <Button 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="RegisterMe" 
      android:textStyle="bold" 
      android:textSize="20dp" 

      android:padding="20dp" 
      android:onClick="storeInfo" 
      /> 




</LinearLayout> 

</LinearLayout> 

MainActivity.java

package com.example.hsports.listviewandmanipulation; 

import android.content.ContentValues; 
import android.content.Intent; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    String name; 
    String emailId; 
    String password; 
    String cnfpassword; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     TextView tv=(TextView)findViewById(R.id.Title); 
     tv.setSelected(true); 

    } 

    public void storeInfo(View v) 
    { 
     name=((EditText)findViewById(R.id.name)).getText().toString(); 

     emailId=((EditText)findViewById(R.id.emailId)).getText().toString(); 
     password=((EditText)findViewById(R.id.password)).getText().toString(); 
     cnfpassword=((EditText)findViewById(R.id.cnfpassword)).getText().toString(); 


     SQLiteDatabase mydb=openOrCreateDatabase("usersInfo",MODE_PRIVATE,null); 
     mydb.execSQL("CREATE TABLE IF NOT EXISTS usersInformation (_id INTEGER PRIMARY KEY AUTOINCREMENT, Name varchar (20), EmailId varchar (20) , Password varchar (20) , CnfPassword varchar (20));"); 
     // mydb.execSQL("INSERT INTO userInfo (Name , EmaiId , Password , CnfPassword) Values ("+name+" , "+emailId+" , "+password+" , "+cnfpassword+");"); 


     ContentValues values=new ContentValues(); 
     values.put("Name",name); 
     values.put("EmailId",emailId); 
     values.put("Password",password); 
     values.put("CnfPassword",cnfpassword); 
     mydb.insert("usersInformation",null,values); 
     mydb.close(); 



     Intent i=new Intent(this,SecondActivity.class); 
     startActivity(i); 



    } 


} 

activity_second.xml(ここで私はListViewのタグを指定した)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.hsports.signuppage.SecondActivity" 
    android:orientation="vertical" 

    android:id="@+id/viewDetails" 
    > 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/list" 
     > 


    </ListView> 



</LinearLayout> 

SecondActivity.java

package com.example.hsports.listviewandmanipulation; 

import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class SecondActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
     SQLiteDatabase mydb=openOrCreateDatabase("usersInfo",MODE_PRIVATE,null); 
     Cursor resultSet = mydb.rawQuery("Select * from usersInformation", null); 
     CustomCursor cc=new CustomCursor(this,resultSet,0); 

    } 

} 

CustomCursor.javaこれはリスト項目です

 package com.example.hsports.listviewandmanipulation; 

import android.Manifest; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.graphics.AvoidXfermode; 
import android.support.v4.app.ActivityCompat; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.CursorAdapter; 
import android.widget.TextView; 

/** 
* Created by I324671 on 9/4/2016. 
*/ 
public class CustomCursor extends CursorAdapter { 

    LayoutInflater inflater; 


    public CustomCursor(Context context, Cursor c, int flags) { 
     super(context, c, flags); 
     inflater=LayoutInflater.from(context); 

    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 

     return inflater.inflate(R.layout.displayoflist, parent, false); 

    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 





     TextView tv=(TextView)view.findViewById(R.id.name); 
     final String f=cursor.getString(cursor.getColumnIndex("Name")); 
     tv.setText(f); 



     int rowid=Integer.parseInt(cursor.getString(cursor.getColumnIndex("_id"))); 
     Button bt=(Button)view.findViewById(R.id.Remove); 
     bt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       //String tv=((TextView) v.findViewById(R.id.name)).getText().toString(); 
       SQLiteDatabase mydb=SQLiteDatabase.openOrCreateDatabase("usersInfo",null); 




       mydb.execSQL("DELETE FROM usersInformation where Name = '"+f+"'"); 
       mydb.close(); 

      } 
     }); 


    } 
} 

(これは私が選択した特定のリスト項目のボタンをクリックしようとしていた中で、私のカスタムカーソルのクラスです)Iを表示する必要があります。

displayoflist.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    > 

<LinearLayout 
    android:layout_width="300dp" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:background="@color/BLACK" 
    > 


    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/name" 
     android:textColor="@color/WHITE" 

     /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/emailId" 
     android:textColor="@color/WHITE" 
     /> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/password" 
     android:textColor="@color/WHITE" 
     /> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/cnfpassword" 
     android:textColor="@color/WHITE" 
     /> 

</LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     > 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/Remove" 
      android:onClick="removeData" 
      android:text="Remove" 
      android:layout_marginRight="0dp" 
      /> 


    </LinearLayout> 


</LinearLayout> 

は、私が表示されたリストビューで(ボタンを削除)ボタンだけでなく、リストを取得することはできませんよ。

エラーの完全なスタックトレースは次のとおりです。

09-12 20:28:30.618 4073-4073/com.example.hsports.listviewandmanipulation E/SQLiteLog: (14) cannot open file at line 31278 of [2ef4f3a5b1] 
09-12 20:28:30.618 4073-4073/com.example.hsports.listviewandmanipulation E/SQLiteLog: (14) os_unix.c:31278: (2) open(//usersInfo) - 
09-12 20:28:30.619 4073-4073/com.example.hsports.listviewandmanipulation E/SQLiteDatabase: Failed to open database 'usersInfo'. 
                          android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 
                           at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 
                           at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:207) 
                           at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:191) 
                           at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 
                           at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 
                           at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 
                           at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806) 
                           at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791) 
                           at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 
                           at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:709) 
                           at com.example.hsports.listviewandmanipulation.CustomCursor$1.onClick(CustomCursor.java:57) 
                           at android.view.View.performClick(View.java:5198) 
                           at android.view.View$PerformClick.run(View.java:21147) 
                           at android.os.Handler.handleCallback(Handler.java:739) 
                           at android.os.Handler.dispatchMessage(Handler.java:95) 
                           at android.os.Looper.loop(Looper.java:148) 
                           at android.app.ActivityThread.main(ActivityThread.java:5417) 
                           at java.lang.reflect.Method.invoke(Native Method) 
                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
09-12 20:28:30.619 4073-4073/com.example.hsports.listviewandmanipulation D/AndroidRuntime: Shutting down VM 
09-12 20:28:30.620 4073-4073/com.example.hsports.listviewandmanipulation E/AndroidRuntime: FATAL EXCEPTION: main 
                          Process: com.example.hsports.listviewandmanipulation, PID: 4073 
                          android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 
                           at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 
                           at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:207) 
                           at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:191) 
                           at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 
                           at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 
                           at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 
                           at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806) 
                           at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791) 
                           at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 
                           at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:709) 
                           at com.example.hsports.listviewandmanipulation.CustomCursor$1.onClick(CustomCursor.java:57) 
                           at android.view.View.performClick(View.java:5198) 
                           at android.view.View$PerformClick.run(View.java:21147) 
                           at android.os.Handler.handleCallback(Handler.java:739) 
                           at android.os.Handler.dispatchMessage(Handler.java:95) 
                           at android.os.Looper.loop(Looper.java:148) 
                           at android.app.ActivityThread.main(ActivityThread.java:5417) 
                           at java.lang.reflect.Method.invoke(Native Method) 
                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

答えて

0

は、私はあなたがCustomCursorクラスのnewViewメソッドをオーバーライドdisplayoflist.xmlレイアウトを膨らませるべきだと思います。

@Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     return inflater.inflate(R.layout.displayoflist, parent, false); 
    } 
bindViewで

あなたがたとえば、あなたのデータを移入する場所を定義する必要があります

TextView name=(TextView)view.findViewById(R.id.name); 
String nameText=cursor.getString(cursor.getColumnIndex("name")); 
name.setText(nameText); 

と、この追加:あなたによって示唆されているように

public class SecondActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
     SQLiteDatabase mydb=openOrCreateDatabase("usersInfo",MODE_PRIVATE,null); 
     Cursor resultSet = mydb.rawQuery("Select * from usersInformation", null); 
     CustomCursor cc=new CustomCursor(this,resultSet,0); 

     ListView listView=(ListView)findViewById(R.id.list); 
     listView.setAdapter(cc); 
    } 

} 
+0

が、私はコードの変更を行いましたが、それでも私はリストビューで項目を取得していません。 –

+0

bindViewでは、カーソルからTextViewsに追加するデータを定義する必要があります。貼り付けられたコードでは、ボタンの動作のみを定義します。 – matejko219

+0

私はあなたから提案されたように変更を加えました。しかし、私はまだ出力を取得していません。私が行った変更は、あなたの提案した通りです。見てください。 –

関連する問題