2017-02-04 5 views
0

Ich versuche, ein StringArray zu verwenden, um Elemente in einem ListView mit einem benutzerdefinierten Adapter anzuzeigen.Verwendung von StringArrays in einem benutzerdefinierten ListView-Adapter

Aber es funktioniert nicht.

package ir.safarbazha.safarbazha.Acts; 

import android.content.Context; 
import android.content.Intent; 
import android.content.pm.ActivityInfo; 
import android.content.res.Configuration; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.view.AbsSavedState; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.Toast; 


import java.lang.reflect.Field; 
import java.lang.reflect.InvocationHandler; 
import java.text.Format; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Comparator; 
import java.util.List; 
import java.util.Locale; 

import javax.xml.datatype.DatatypeConstants; 

import ir.safarbazha.safarbazha.Core.adapter.DrawerCustomListAdapter; 
import ir.safarbazha.safarbazha.Core.app.AppController; 
import ir.safarbazha.safarbazha.R; 

import static ir.safarbazha.safarbazha.R.id.content_frame; 
import static ir.safarbazha.safarbazha.R.id.toolbar; 

public class HomeAct extends AppCompatActivity { 

    ActionBar homeActionbar; 
    String[] draweritems; 
    List<String> drawerItems; 
    int homeDrawerMenuItemsNumber=1; 
    DrawerCustomListAdapter drawerCustomListAdapter; 
    DrawerLayout homeDLayout; 
    ListView homeDrawerListView; 
    ImageView mainToolbarMenu; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //Localize... 
     if (!Locale.getDefault().getLanguage().equals("fa")){ 
      String languageToLoad = "fa"; 
      Locale locale = new Locale(languageToLoad); 
      Locale.setDefault(locale); 
      Configuration config = new Configuration(); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, 
        getBaseContext().getResources().getDisplayMetrics()); 
      this.setContentView(R.layout.act_about); 
      setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

     } 
     setContentView(R.layout.act_home); 
     homeDLayout=(DrawerLayout)findViewById(R.id.drawer_layout); 
     homeDrawerListView=(ListView)findViewById(R.id.drawer_lv); 

     //Set Custom ToolBar... 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     homeActionbar=getSupportActionBar(); 
     final LayoutInflater inflator = (LayoutInflater) this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflator.inflate(R.layout.toolbar, null); 
     homeActionbar.setCustomView(v); 
     homeActionbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 

     //Set Custom ToolBar Objects... 
     //MainToolBar Menu Image Object... 
     mainToolbarMenu=(ImageView)findViewById(R.id.nav_drawer_menu); 
     mainToolbarMenu.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (homeDLayout.isDrawerOpen(GravityCompat.START)) 
        homeDLayout.closeDrawer(GravityCompat.START); 
       else homeDLayout.openDrawer(GravityCompat.START); 
      } 
     }); 

     //Set Custom Home Navigation Drawer... 
     draweritems= getResources().getStringArray(R.array.main_titles); 
     drawerItems=new ArrayList<String>(Arrays.asList(draweritems)); 
     drawerCustomListAdapter=new DrawerCustomListAdapter(this,draweritems); 
     homeDrawerListView.setAdapter(drawerCustomListAdapter); 
     // homeDrawerListView.setAdapter(new ArrayAdapter<String>(
     //  this,R.layout.drawer_list_row,homeDrawerMenuItems)); 


     // homeDrawerListView.setAdapter(new ArrayAdapter<String>(
     //  this,android.R.layout.simple_list_item_1,homeDrawerMenuItems)); 

     homeDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       String selectedItem=getResources().getStringArray(R.array.main_titles)[position]; 
       Toast.makeText(getBaseContext(),"برروی "+selectedItem+"کلیک شد!",Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

    } 
} 

package ir.safarbazha.safarbazha.Core.adapter; 


import android.content.Context; 

import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 


import java.util.ArrayList; 
import java.util.List; 

import ir.safarbazha.safarbazha.R; 

public class DrawerCustomListAdapter extends BaseAdapter{ 

    public Context context; 
    public List<String> drawerItems; 
    private static LayoutInflater inflater=null; 

    public void drawerCustomListViewItemRow(
      Context context,List<String> drawerItems 
    ){ 
     this.context=context; 
     this.drawerItems=drawerItems; 
     inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return drawerItems.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return drawerItems.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View vi = convertView; 
     if (vi == null) 
      vi = inflater.inflate(R.layout.drawer_list_row, null); 
     TextView title = (TextView) vi.findViewById(R.id.drawer_lv_title); 
     title.setText(drawerItems.get(position)); 
     ImageView icon=(ImageView)vi.findViewById(R.id.drawer_lv_icon); 
     icon.setImageResource(R.drawable.ic_menu_left); 
     return vi; 
    } 

    /* 

    public Object getItem(int position) { 
     return position; 
    } 

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     if(convertView==null) 
      vi = inflater.inflate(R.layout.drawer_list_row, null); 

     TextView title = (TextView)vi.findViewById(R.id.drawer_lv_title); // title 
     ImageView icon=(ImageView)vi.findViewById(R.id.drawer_lv_icon); // thumb image 

     // Setting all values in listview 
     title.setText(R.string.app_name); 
     icon.setImageResource(R.drawable.ic_account_circle); 
     return vi; 
    } 
    */ 
} 

Meine Android Studio sagt, dass das Problem in HomeAct ist, wo ich getippt: (this,draweritems);

+2

Bitte senden Sie den vollständigen Fehler –

+0

DrawerCustomListAdapter' keinen Konstruktor hat. – Karakuri

+0

Konstruktor? Was und wo muss ich es hinzufügen? – Amin

Antwort

0

Sie void arary Liste String den Adapter ändern hinzugefügt, daher ein Verfahren, kein Konstruktor zu erstellen. Konstruktoren haben keinen Rückgabetyp.

entfernen es

public **void** drawerCustomListViewItemRow(
     Context context,List<String> drawerItems 
){ 
    this.context=context; 
    this.drawerItems=drawerItems; 
    inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

Auch die D für Ihren Klassennamen von drawerCustomListViewItemRow anstelle DrawerCustomListAdapter

und verwenden Sie die Liste der drawerItems, nicht das Array draweritems nutzen, wenn Sie den Adapter erstellen. Wahrscheinlich am besten, nur das eine oder das andere zu speichern, nicht beides.

+0

perfekt! Es war wirklich helpfull.thanks alot – Amin

+0

Meine Augen haben Problem mit light.so meinem Windows 10 OS Thema ist dark.and Wenn es dunkel ist, mit vielen CSS-Stile für mich zu sein verstecken und ich kann sie nicht sehen, so kann man sagen! Wo ist das auf dem Bildschirm? – Amin

+0

Sorry, ich weiß nicht, was ihr bittet –

0

Sie haben einen Konstruktor zu Ihrem Adapter Klasse hinzuzufügen

ändern Sie‘ r drawerCustomListViewItemRow Name der Methode:

public DrawerCustomListAdapter(Context context, List<string> drawerItems) 

und eine weitere Sache ist, dass Sie entweder zu String[] draweritems; in HomeAct zu List<string> draweritems; oder ändern

+0

inkompatible Typen. gefunden: java.lang.String [] erforderlich java.util.List ........... Und sind diese Linien rot: draweritems = GetResources() getStringArray (R.. array.main_titles); drawerItems = new Array (Arrays.asList (draweritems)); DrawerCustomListAdapter = new DrawerCustomListAdapter (dieses draweritems); – Amin

0

Ich habe Ihren Code geändert. Bitte überprüfen Sie den Unterschied. Ihr DrawerCustomListAdapter Konstruktor war nicht in Ordnung.

Paket ir.safarbazha.safarbazha.Acts;

importieren android.content.Context; Importieren Sie android.content.Intent; Importieren android.content.pm.ActivityInfo; Import android.content.res.Configuration; importieren android.os.Bundle; Importieren android.support.design.widget.FloatingActionButton; Import android.support.design.widget.Snackbar; importieren Sie android.support.v4.view.AbsSavedState; importieren Sie android.support.v4.view.GravityCompat; Importieren android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; importieren android.support.v4.widget.DrawerLayout; Importieren android.support.v7.app.ActionBar; importieren Sie android.support.v7.app.AlertDialog; importieren Sie android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; Importieren Sie android.view.Gravity; Import android.view.LayoutInflater; importieren android.view.View; Import android.widget.AdapterView; Importieren Sie android.widget.ArrayAdapter; Import android.widget.ImageView; importieren Sie android.widget.ListView; importieren android.widget.Toast;

import java.lang.reflect.Field; Import java.lang.reflect.InvocationHandler; import java.text.Format; Import java.util.ArrayList; Importieren Sie java.util.Arrays; Importieren java.util.Comparator; import java.util.List; import java.util.Locale;

import javax.xml.datatype.DatatypeConstants;

import ir.safarbazha.safarbazha.Core.adapter.DrawerCustomListAdapter; import ir.safarbazha.safarbazha.Core.app.AppController; Importieren ir.safarbazha.safarbazha.R;

import static ir.safarbazha.safarbazha.R.id.content_frame; import static ir.safarbazha.safarbazha.R.id.toolbar;

public class erstreckt HomeAct AppCompatActivity {

ActionBar homeActionbar; 
String[] draweritems; 
List<String> drawerItems; 
int homeDrawerMenuItemsNumber = 1; 
DrawerCustomListAdapter drawerCustomListAdapter; 
DrawerLayout homeDLayout; 
ListView homeDrawerListView; 
ImageView mainToolbarMenu; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //Localize... 
    if (!Locale.getDefault().getLanguage().equals("fa")) { 
     String languageToLoad = "fa"; 
     Locale locale = new Locale(languageToLoad); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     getBaseContext().getResources().updateConfiguration(config, 
       getBaseContext().getResources().getDisplayMetrics()); 
     this.setContentView(R.layout.act_about); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    } 
    setContentView(R.layout.act_home); 
    homeDLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    homeDrawerListView = (ListView) findViewById(R.id.drawer_lv); 

    //Set Custom ToolBar... 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    homeActionbar = getSupportActionBar(); 
    final LayoutInflater inflator = (LayoutInflater) this 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = inflator.inflate(R.layout.toolbar, null); 
    homeActionbar.setCustomView(v); 
    homeActionbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 

    //Set Custom ToolBar Objects... 
    //MainToolBar Menu Image Object... 
    mainToolbarMenu = (ImageView) findViewById(R.id.nav_drawer_menu); 
    mainToolbarMenu.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (homeDLayout.isDrawerOpen(GravityCompat.START)) 
       homeDLayout.closeDrawer(GravityCompat.START); 
      else homeDLayout.openDrawer(GravityCompat.START); 
     } 
    }); 

    //Set Custom Home Navigation Drawer... 
    draweritems = getResources().getStringArray(R.array.main_titles); 
    drawerItems = new ArrayList<String>(Arrays.asList(draweritems)); 
    drawerCustomListAdapter = new DrawerCustomListAdapter(this, draweritems); 
    homeDrawerListView.setAdapter(drawerCustomListAdapter); 
    // homeDrawerListView.setAdapter(new ArrayAdapter<String>(
    //  this,R.layout.drawer_list_row,homeDrawerMenuItems)); 


    // homeDrawerListView.setAdapter(new ArrayAdapter<String>(
    //  this,android.R.layout.simple_list_item_1,homeDrawerMenuItems)); 

    homeDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      String selectedItem = getResources().getStringArray(R.array.main_titles)[position]; 
      Toast.makeText(getBaseContext(), "برروی " + selectedItem + "کلیک شد!", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

} } 

Paket ir.safarbazha.safarbazha.Core.adapter;

import android.content.Context; 

    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.BaseAdapter; 
    import android.widget.ImageView; 
    import android.widget.TextView; 


    import java.util.ArrayList; 
    import java.util.List; 

    import ir.safarbazha.safarbazha.R; 

public-Klasse erweitert DrawerCustomListAdapter BaseAdapter {

public Context context; 
public List<String> drawerItems; 
private static LayoutInflater inflater = null; 

public void DrawerCustomListAdapter(
     Context context, List<String> drawerItems 
) { 
    this.context = context; 
    this.drawerItems = drawerItems; 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return drawerItems.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return drawerItems.get(position); 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View vi = convertView; 
    if (vi == null) 
     vi = inflater.inflate(R.layout.drawer_list_row, null); 
    TextView title = (TextView) vi.findViewById(R.id.drawer_lv_title); 
    title.setText(drawerItems.get(position)); 
    ImageView icon = (ImageView) vi.findViewById(R.id.drawer_lv_icon); 
    icon.setImageResource(R.drawable.ic_menu_left); 
    return vi; 
} 

/* 

public Object getItem(int position) { 
    return position; 
} 

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

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    if(convertView==null) 
     vi = inflater.inflate(R.layout.drawer_list_row, null); 

    TextView title = (TextView)vi.findViewById(R.id.drawer_lv_title); // title 
    ImageView icon=(ImageView)vi.findViewById(R.id.drawer_lv_icon); // thumb image 

    // Setting all values in listview 
    title.setText(R.string.app_name); 
    icon.setImageResource(R.drawable.ic_account_circle); 
    return vi; 
} 
*/ } 
+0

die {} Taste im Editor verwenden, um Codeblöcke zu erstellen, nicht das Zitat Button –

Verwandte Themen