2017-02-04 83 views
0

我想使用StringArray在自定義適配器中顯示ListView中的項目。如何在自定義ListView適配器中使用StringArrays

但它不起作用。

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; 
    } 
    */ 
} 

我的Android Studio中說,問題是出在HomeAct,在那裏我輸入:(this,draweritems);

+2

請發佈完整的錯誤 –

+0

DrawerCustomListAdapter'沒有一個構造函數。 – Karakuri

+0

構造?什麼,在哪裏我要補充嗎? – Amin

回答

0

您加入void這裏,因此創建一個方法,而不是一個構造函數。構造函數沒有返回類型。

刪除它

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

而且從drawerCustomListViewItemRow,而不是DrawerCustomListAdapter

大寫d爲您的類名,並在創建適配器使用drawerItems,而不是數組draweritems名單。可能最好只存儲一個或另一個,而不是兩個。

+0

完美!這是很多 – Amin

+0

我的眼睛真正helpfull.thanks有問題,light.so我的Windows 10操作系統的主題是dark.and很暗時,有許多CSS樣式要躲我,我看不到他們,所以你能不能告訴!屏幕在哪裏? – Amin

+0

對不起,我不知道你問 –

0

你有一個構造函數添加到您的適配器類

改變你」 r drawerCustomListViewItemRow方法名稱如下:

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

還有一件事是,你必須在HomeAct要麼改變String[] draweritems;List<string> draweritems;或更改適配器列表串arary

+0

不兼容的類型。實測值:java.lang.String中[]所需的java.util.List ...........而這些線條是紅色:draweritems = getResources()getStringArray(R.。 array.main_titles); drawerItems =新的ArrayList (Arrays.asList(draweritems)); DrawerCustomListAdapter =新DrawerCustomListAdapter(此draweritems); – Amin

0

我修改了你的代碼。請檢查差異。您的DrawerCustomListAdapter構造函數不正確。

package ir.safarbazha.safarbazha.Acts;

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

import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; import java.text.Format; import java.util.ArrayList; import java.util。陣列;導入 的java.util.Comparator; import java.util.List; import java.util.Locale;

進口javax.xml.datatype.DatatypeConstants中;

進口ir.safarbazha.safarbazha.Core.adapter.DrawerCustomListAdapter; 進口ir.safarbazha.safarbazha.Core.app.AppController;導入 ir.safarbazha.safarbazha.R;

進口靜態ir.safarbazha.safarbazha.R.id.content_frame; 進口靜態ir.safarbazha.safarbazha.R.id.toolbar;

公共類擴展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(); 
     } 
    }); 

} } 

包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; 

公共類擴展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

使用{}按鈕,在編輯器中創建代碼塊,而不是報價按鈕 –

相關問題