WebHU - Programozási kérdések és válaszok

Null objektum hivatkozást meghívó eszköztár megvalósítása

Problémáim vannak az akciósáv megvalósítása során (amit azt hiszem, most az eszköztár váltotta fel). Amit szeretnék, egy kis legördülő menü 3 ponttal, ahol megadhatok néhány lehetőséget, például beállításokat és krediteket. Megpróbáltam úgy beállítani, hogy a menü megjelenjen a homelistview.java oldalon. Úgy érzem, körbejártam a különböző megoldásokat, és minden alkalommal új hibaüzenetet kaptam, és mindig ugyanarra a helyre mutat, amelyet alább említettünk.

setSupportActionBar(toolbar);

Eredetileg azt hittem, hogy azért, mert nem tartalmaztam a setContentView(R.layout.activity_main); de nem volt boldog, beleértve a 2 tartalommegtekintést is. Bármilyen segítséget szívesen vennénk.

Itt a kódom.

styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

--------------- menu_main.xml-------------------

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="cs495capstone.edu.bsu.myapplication.MainActivity">
<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never" />
<item
    android:id="@+id/action_credits"
    android:orderInCategory="100"
    android:title="@string/action_credits"
    app:showAsAction="never" />
<item
    android:id="@+id/action_lovely"
    android:orderInCategory="100"
    android:title="@string/action_lovely"
    app:showAsAction="never" />
</menu>

--------------activity_main.xml -----------------

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="cs495capstone.edu.bsu.myapplication.HomeActivityListview">

<android.support.design.widget.AppBarLayout
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/activity_add_appointment" />
<include layout="@layout/activity_add_history" />
<include layout="@layout/activity_appointments" />
<include layout="@layout/activity_dog_profile" />
<include layout="@layout/activity_history" />
<include layout="@layout/activity_home" />
<include layout="@layout/activity_home_activity_listview" />
<include layout="@layout/activity_login" />
<include layout="@layout/activity_new_dog" />
<include layout="@layout/activity_registration" />
<include layout="@layout/activity_splash_screen" />
<include layout="@layout/activity_update_dog" />

</android.support.design.widget.CoordinatorLayout>

----------------------- homeactivitylistview.xml------------------------- -

public class HomeActivityListview extends AppCompatActivity {

    ListView lv;
    Context context;
    ArrayList dogName;
    ArrayList dogID;
    public static int [] dogImages={R.drawable.dogpic};
    public static String [] dogNames={};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_activity_listview);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        context=this;

        lv=(ListView) findViewById(R.id.listView);
        lv.setAdapter(new CustomAdapter(this, dogImages));
    }


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}


public void sendProfile(View view) {
        Intent intent = new Intent(getApplicationContext(), DogProfileActivity.class);
        startActivity(intent);

    }

    public void NumberOne(View view) {
        AlertDialog.Builder alertDlg = new AlertDialog.Builder(this);
        alertDlg.setMessage("Confirm Dog went number one");
        alertDlg.setCancelable(false);

        alertDlg.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //HomeActivity.super.onBackPressed();
            }
        });

        alertDlg.setNegativeButton("Change", new DialogInterface.OnClickListener(){

            @Override
            public void onClick(DialogInterface dialog, int which) {
                //HomeActivity.super.onBackPressed();
            }
        });
        alertDlg.create().show();

    }
    public void NumberTwo(View view) {
        AlertDialog.Builder alertDlg = new AlertDialog.Builder(this);
        alertDlg.setMessage("Confirm Dog went number two");
        alertDlg.setCancelable(false);

        alertDlg.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //HomeActivity.super.onBackPressed();
            }
        });

        alertDlg.setNegativeButton("Change", new DialogInterface.OnClickListener(){

            @Override
            public void onClick(DialogInterface dialog, int which) {
                //HomeActivity.super.onBackPressed();
            }
        });
        alertDlg.create().show();

    }

    public void AddNewDog(View view) {
        Intent intent = new Intent(getApplicationContext(), NewDogActivity.class);
        startActivity(intent);
    }

}

------------------ main_activity.java ------------------

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

--------------homelistview.java-------------------

public class HomeActivityListview extends AppCompatActivity {

    ListView lv;
    Context context;
    ArrayList dogName;
    ArrayList dogID;
    public static int [] dogImages={R.drawable.dogpic};
    public static String [] dogNames={};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_activity_listview);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        context=this;

        lv=(ListView) findViewById(R.id.listView);
        lv.setAdapter(new CustomAdapter(this, dogImages));
    }


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}


public void sendProfile(View view) {
        Intent intent = new Intent(getApplicationContext(), DogProfileActivity.class);
        startActivity(intent);

    }

    public void NumberOne(View view) {
        AlertDialog.Builder alertDlg = new AlertDialog.Builder(this);
        alertDlg.setMessage("Confirm Dog went number one");
        alertDlg.setCancelable(false);

        alertDlg.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //HomeActivity.super.onBackPressed();
            }
        });

        alertDlg.setNegativeButton("Change", new DialogInterface.OnClickListener(){

            @Override
            public void onClick(DialogInterface dialog, int which) {
                //HomeActivity.super.onBackPressed();
            }
        });
        alertDlg.create().show();

    }
    public void NumberTwo(View view) {
        AlertDialog.Builder alertDlg = new AlertDialog.Builder(this);
        alertDlg.setMessage("Confirm Dog went number two");
        alertDlg.setCancelable(false);

        alertDlg.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //HomeActivity.super.onBackPressed();
            }
        });

        alertDlg.setNegativeButton("Change", new DialogInterface.OnClickListener(){

            @Override
            public void onClick(DialogInterface dialog, int which) {
                //HomeActivity.super.onBackPressed();
            }
        });
        alertDlg.create().show();

    }

    public void AddNewDog(View view) {
        Intent intent = new Intent(getApplicationContext(), NewDogActivity.class);
        startActivity(intent);
    }

}

---------------androidmanifest------------------

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cs495capstone.edu.bsu.doggydid" >

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme" >
    <activity android:name=".SplashScreenActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".RegistrationActivity"
        android:label="Registration" />
    <activity
        android:name=".NewDogActivity"
        android:label="Dog Information" />
    <activity
        android:name=".LoginActivity"
        android:label="Login" />
    <activity
        android:name=".HomeActivity"
        android:label="@string/title_activity_home" />
    <activity
        android:name=".DogProfileActivity"
        android:label="@string/title_activity_dog_profile" />
    <activity
        android:name=".HistoryActivity"
        android:label="@string/title_activity_records" />
    <activity
        android:name=".addHistoryActivity"
        android:label="@string/title_activity_add_record" />
    <activity
        android:name=".EventsActivity"
        android:label="@string/title_activity_events" />
    <activity
        android:name=".addEventsActivity"
        android:label="@string/title_activity_add_events" />
    <activity
        android:name=".UpdateDogActivity"
        android:label="@string/title_activity_update_dog" />
    <activity
        android:name=".HomeActivityListview"
        android:label="@string/title_activity_home_activity_listview"
        android:theme="@style/AppTheme.NoActionBar">
    </activity>
</application>

</manifest>

-----------------------Hiba kiolvasása---------------------

Az Eszköztár eszköztár csak az onCreate-ben van deklarálva/inicializálva, ezért a hatókör kimaradt ebből a metódusból...

14.04.2016

  • Ez lehet az, hogy megnézzük az új projektet, amely egy eszköztárat tartalmaz egyéni alkalmazássor-elrendezésként és eszköztárként, majd az enyémet nézve az xml szerkesztését nem hozta létre. és makacs, amikor megpróbálom hozzáadni őket a tervnézethez 14.04.2016
  • Igen, a "Design" mód kissé macerás tud lenni. Azt javaslom, hogy XML-fájlok esetén használja a "Szöveg" szerkesztési módot, amikor módosítania kell. 14.04.2016
  • Igen, ezúttal fordítva történt, hogy a tervezési mód nem tartalmazta az egyéni nézeteket vagy eszköztárakat a tervezésben. Míg a szövegszerkesztő módban minden kód megvolt hozzájuk. 14.04.2016
  • Ha eltávolítom az Eszköztárat a Toolbar eszköztárból = (Eszköztár) findViewByID(R.id.toolbar); hibát dob, és azt akarja, hogy ott inicializáljam, hozzáadva az Eszköztárat 14.04.2016

Válaszok:


1

definiálja az objektumot tevékenységi változóként, és inicializálja a onCreate

Úgy tűnik, a onCreate értéket állítja be a

public class HomeActivityListview extends AppCompatActivity {

    ListView lv;
    Context context;
    ArrayList dogName;
    ArrayList dogID;
    public static int [] dogImages={R.drawable.dogpic};
    public static String [] dogNames={};
    private Toolbar toolbar;  //define it  here
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_activity_listview);
        toolbar = (Toolbar) findViewById(R.id.toolbar);  //but init here
        setSupportActionBar(toolbar);

        context=this;

        lv=(ListView) findViewById(R.id.listView);
        lv.setAdapter(new CustomAdapter(this, dogImages));
    }
és a _3_ mezőben is. A beillesztett XML-fájl a _4_ elrendezési fájlja, ebből a sorból _5_ ítélve. Meg tudja-e ellenőrizni, hogy a _6_ tartalmaz-e egy _7_ értéket egy _8_ R.id.eszköztárral?

public class HomeActivityListview extends AppCompatActivity {

    ListView lv;
    Context context;
    ArrayList dogName;
    ArrayList dogID;
    public static int [] dogImages={R.drawable.dogpic};
    public static String [] dogNames={};
    private Toolbar toolbar;  //define it  here
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_activity_listview);
        toolbar = (Toolbar) findViewById(R.id.toolbar);  //but init here
        setSupportActionBar(toolbar);

        context=this;

        lv=(ListView) findViewById(R.id.listView);
        lv.setAdapter(new CustomAdapter(this, dogImages));
    }
14.04.2016
  • hogyan távolítod el?? 14.04.2016
  • Végül kitalálta. Az activity_main xml osztályomban csak az xml-ben kódoltam, és amikor tervező módban néztem, nem mutatta az alkalmazástár elrendezését vagy az eszköztár beállításait 14.04.2016
  • 04-14 13:35:36.905 3117-3117/cs495capstone.edu.bsu.doggydid E/AndroidRuntime: VÉGZETES KIVÉTEL: fő Folyamat: cs495capstone.edu.bsu.doggydid, PID: UntimevaEx.lang.17untimevaEx. ComponentInfo{cs495capstone.edu.bsu.doggydid/cs495capstone.edu.bsu.doggydid.HomeActivityListview}: java.lang.NullPointerException: Kísérlet a 'java.lang.CharSequence android.support.tle.(.dgegett.v7. ). :144) itt: android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) itt: android.os.Handler.dispatchMessage(Handler.java:102) itt: android.os.Looper.loop(Looper.java:135) itt: android.app.ActivityThread.main(ActivityThread.java:5221) itt: java.lang.reflect.Method.invoke(Native Method) itt: java.lang.reflect.Method.invoke(Method.java:372) itt: com.android .internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) itt: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Oka: java.lang.NullPointerException: Virtuális metódus meghívása „java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()” egy null objektum hivatkozáson az android.support.v7.widgetben. ToolbarWidgetWrapper.(ToolbarWidgetWrapper.java:98) itt: android.support.v7.widget.ToolbarWidgetWrapper.(ToolbarWidgetWrapper.java:91) itt: android.support.v7.app.ToolbarActionBar.(ToolbarActionBar.java:.7support.3) v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:205) itt: android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:99) itt: cs495capstone. istview.java: 31) itt: android.app.Activity.performCreate(Activity.java:5933) itt: android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) itt: android.app.ActivityThread.performLaunchActivity(ActivityThread.java:225). app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)  itt: android.app.ActivityThread.access$800(ActivityThread.java:144) Handler.dispatchMessage(Handler.java:102)  itt: android.os.Looper.loop(Looper.java:135) , android.app.ActivityThread.main(ActivityThread.java:5221)  itt: java.lang.reflect.Method.invoke (Natív módszer)  itt: java.lang.reflect. Method.invoke(Method.java:372)  itt: com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)  itt: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 14.04.2016
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..