2016-06-18 9 views
0

私はもっと大きなAndroidアプリケーション用のコンタクトマネージャーモジュールを作成しようとしていますが、ViewPagerでフラグメントを使用してListViewにコンタクトを表示しています。私が今必要としているのは、ユーザーがアイテムをクリックしてリストのAlertDialogから「編集」を選択してレコードを編集できるようにすることです。つまり、新しいContactEditアクティビティで、テーブルの列のすべてのフィールドに、前のフラグメントのListViewでlongClickedされた特定のレコードの情報が格納されるようにします。 putExtraメソッドを使用して、アクティビティを開くために使用しているインテントのレコードの行IDを入れました。しかし、もう一方で、getIntent()。getExtras()。getInt()メソッドを使用したとき、私はandroid.content.res.Resources $ NotFoundExceptionを返しました。

ContactList.class

package com.example.nikhil.test1; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 



public class ContactList extends Fragment { 
    private SimpleCursorAdapter dataAdapter; 
    private ContactsAdapter dbHelper; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     ViewGroup rootView = (ViewGroup) inflater.inflate(
       R.layout.fragment_item_list, container, false); 
     dbHelper = new ContactsAdapter(this.getActivity()); 
     dbHelper.open(); 
     Cursor cursor = dbHelper.getAllFriends(); 
     String[] columns = new String[] { 
       ContactsAdapter.KEY_NAME, ContactsAdapter.KEY_Phone 
     }; 
     int[] to = new int[] { 
       R.id.name, R.id.phonenumber 
     }; 
     dataAdapter = new SimpleCursorAdapter(
       this.getActivity(), R.layout.contact_row, 
       cursor, 
       columns, 
       to, 
       0); 
     ListView listView = (ListView) rootView.findViewById(R.id.list); 
     listView.setAdapter(dataAdapter); 
     listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
       builder.setTitle("Pick an action"); 
       builder.setItems(new String[]{"Edit","Delete","Activate Call Forwarding"}, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         if(which==0){ 
         Intent i = new Intent(getActivity(), ContactEdit.class); 
         i.putExtra("RowID",position); 
         startActivity(i); 
         } 

        } 
       }); 
       AlertDialog alertDialog=builder.create(); 
       alertDialog.show(); 
       return true; 
      } 
     }); 
     return rootView; 
    } 


} 

に...

package com.example.nikhil.test1; 
import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.MenuItem; 
import android.support.v4.app.NavUtils; 
import android.widget.EditText; 


public class ContactEdit extends Activity { 
    ContactsAdapter dbHelper; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_contact_edit); 
     dbHelper = new ContactsAdapter(this); 
     dbHelper.open(); 


     if(getIntent() != null) { 
      Bundle extras = getIntent().getExtras(); 
      EditText _Name = (EditText) findViewById(R.id.edittextName); 
      _Name.setText(extras.getInt("RowID")); 
      /* int rowId = extras != null ? extras.getInt("RowID") : -1; 
      Cursor cursor = dbHelper.getFriend(rowId); 
      String name = cursor.getString(1); 
      String mobile = cursor.getString(2); 
      String home = cursor.getString(3); 
      String address = cursor.getString(4); 

      EditText _Name = (EditText) findViewById(R.id.edittextName); 
      _Name.setText(name); 
      EditText _Mobile = (EditText) findViewById(R.id.edittextMobile); 
      _Mobile.setText(mobile); 
      EditText _Home = (EditText) findViewById(R.id.edittextHome); 
      _Home.setText(home); 
      EditText _Address = (EditText) findViewById(R.id.edittextAddress); 
      _Address.setText(address);*/ 
     } 
     else 
     { 
      EditText _Name = (EditText) findViewById(R.id.edittextName); 
      _Name.setText(" "); 
      EditText _Mobile = (EditText) findViewById(R.id.edittextMobile); 
      _Mobile.setText(" "); 
      EditText _Home = (EditText) findViewById(R.id.edittextHome); 
      _Home.setText(" "); 
      EditText _Address = (EditText) findViewById(R.id.edittextAddress); 
      _Address.setText(" "); 
     } 


    } 



    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 

      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

ContactEdit.classを、関連するコードとエラーログを見て、ここでは学習者の仲間を手助けしてみてください実際の意図したコードをコメントに入れて、自分のアクティビティでもRowIDをインテントから抽出できるかどうかを確認できます。 logaトン・エラー・ログ

06-18 15:49:45.676 18965-18965/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.nikhil.test1, PID: 18965 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nikhil.test1/com.example.nikhil.test1.ContactEdit}: android.content.res.Resources$NotFoundException: String resource ID #0x0 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2335) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5268) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 
    Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0 
      at android.content.res.Resources.getText(Resources.java:305) 
      at android.widget.TextView.setText(TextView.java:4152) 
      at com.example.nikhil.test1.ContactEdit.onCreate(ContactEdit.java:23) 
      at android.app.Activity.performCreate(Activity.java:6033) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397) 
            at android.app.ActivityThread.access$800(ActivityThread.java:151) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5268) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 
+1

私は問題はこのラインであると思い、あなたのactivity_contact_edit.xmlファイル – Vickyexpert

+0

をまく: '_Name.setText(extras.getInt( "RowIDを"));' – Ironman

+0

この_Name.setText(String.valueOf(エキストラのように変更してください.getInt( "RowID")));また、putExtra()をi.putExtra( "rowId"、(int)position)のように変更します。 –

答えて

1

この行はエラーを引き起こしている可能性のある:

_Name.setText(extras.getInt("RowID")); 

に置き換えます

_Name.setText(""+extras.getInt("RowID")); 

をちょうど整数を文字列に変換するには、 "" を追加。試してみてください。

関連する問題