2017-01-02 3 views
0

Ich versuche, eine Kartenansicht innerhalb der Rasteransicht zu implementieren. Die Rasteransicht zeigt perfekt; selbst wenn ich ein Gitteransichtselement berühre, zeigt es nichts. Aber wenn ich auf den Text klicke, der unter seiner Arbeit angezeigt wird. Ich erwähnte This, aber nicht funktioniert ...GridView onClickListener/onItemClickListener funktioniert nicht

Danke.

Mein Code ist wie unten,

// Contact_Backup.java

public class Contact_Backup extends AppCompatActivity { 

     @Bind(R.id.gridview) 
     GridView gridview; 
     String[] contact_screen_array; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.contact_backup); 
      ButterKnife.bind(this); 
      contact_screen_array = getResources().getStringArray(R.array.TextScreen); 
      String[] contact_icon_array = getResources().getStringArray(R.array.IconScreen); 
      String concat = "\nContacts"; 
      gridview.setAdapter(new Custom_Adapter(getApplicationContext(),contact_icon_array,contact_screen_array,concat)); 
     } 
    } 

// Custom_Adapter

public class Custom_Adapter extends BaseAdapter { 

    Context contaxt; 
    String[] Array_text; 
    String[] Array_icon; 
    String concat; 
    LayoutInflater inflater; 

    public Custom_Adapter(Context context,String[] Array_icon, String[] Array_text, String concat) 
    { 
     this.contaxt = context; 
     this.Array_text = Array_text; 
     this.Array_icon = Array_icon; 
     this.concat=concat; 
     inflater = (LayoutInflater)context. 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    @Override 
    public int getCount() { 
     return Array_text.length; 
    } 
    @Override 
    public Object getItem(int position) { 
     return position; 
    } 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 


    @Bind(R.id.Screen_icon) 
    Button Screen_icon; 
    @Bind(R.id.Screen_text) 
    TextView Screen_text; 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View grid; 
     LayoutInflater inflater = (LayoutInflater) contaxt 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      grid = new View(contaxt); 
      grid = inflater.inflate(R.layout.new_app_card_layout, null); 
      ButterKnife.bind(this, grid); 
      Screen_text.setText(Array_text[position]+concat); 
      Screen_icon.setText(Array_icon[position]); 
      Typeface font = Typeface.createFromAsset(contaxt.getAssets(), "fonts/fontawesome-webfont.ttf"); 
      Screen_icon.setTypeface(font); 
     } else { 
      grid = (View) convertView; 
     } 

     grid.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.d("TAG::",""+position); 
      } 
     }); 
     return grid; 
    } 
} 

// contact_backup.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/main_backgorund" 
    > 
    <RelativeLayout 
     android:background="@color/transparent" 
     android:padding="5.0dip" 
     android:id="@+id/top_bar_screen" 
     android:layout_weight="0.2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:textColor="@color/newclr" 
      android:id="@+id/tvContacts" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/contacts" 
      android:shadowColor="#000000" 
      android:shadowDx="1.0" 
      android:shadowDy="1.0" 
      android:shadowRadius="2.0" 
      android:layout_centerVertical="true" /> 
     <TextView 
      android:textColor="@color/newclr" 
      android:id="@+id/tvLastBackup" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/last_backup" 
      android:shadowColor="#000000" 
      android:shadowDx="1.0" 
      android:shadowDy="1.0" 
      android:shadowRadius="2.0" 
      android:layout_alignParentRight="true" 
      android:layout_centerVertical="true" /> 
    </RelativeLayout> 

    <View 
     android:layout_width="fill_parent" 
     android:layout_height="1dp" 
     android:id="@+id/v1" 
     android:layout_below="@+id/top_bar_screen" 
     android:background="@color/newclr"/> 

    <GridLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/swipe" 
     android:layout_below="@+id/v1" 
     android:paddingTop="20sp" 
     android:paddingLeft="10sp" 
     android:paddingRight="10sp" 
     android:layout_weight="0.6" 
     > 

    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="fill_parent" 
     android:columnWidth="90dp" 
     android:numColumns="auto_fit" 
     android:verticalSpacing="10dp" 
     android:horizontalSpacing="10dp" 
     android:layout_height="wrap_content" /> 
    </GridLayout> 

    <!-- com.startapp.android.publish.banner.Banner 
     android:id="@+id/startAppBanner1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_weight="0.2" 
     android:layout_centerHorizontal="true" /--> 


</RelativeLayout> 

// Neue_App_card_layout.xml

Antwort

0

Setzen Sie den Listener auf das tatsächliche Objekt gridview. class.please überprüfen wieder mit diesem aktualisierten Code gridView.setOnItemClickListener(new OnItemClickListener()...);

+0

ich versuche, es in der Contact_Backup.java Klasse aber das Code nicht ausgeführt hat. –

+0

Vielen Dank für Ihr Paar Zeit .... :) –

0

die Sie interessieren,

public class Contact_Backup extends AppCompatActivity { 

     @Bind(R.id.gridview) 
     GridView gridview; 
     String[] contact_screen_array; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.contact_backup); 
      ButterKnife.bind(this); 
      contact_screen_array = getResources().getStringArray(R.array.TextScreen); 
      String[] contact_icon_array = getResources().getStringArray(R.array.IconScreen); 
      String concat = "\nContacts"; 
      gridview.setAdapter(new Custom_Adapter(getApplicationContext(),contact_icon_array,contact_screen_array,concat)); 
      gridview.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        for(int i=0;i<contact_screen_array.length;i++) { 
         Log.d("TAG::", "Position"+contact_screen_array[i]); 
        } 
       } 
      }); 
     } 
    } 
+0

Entfernen Listener von Adapter-Klasse und verwenden Sie es in Aktivität –

+0

Ich habe versucht, aber es funktioniert nicht Kumpel ... es funktioniert nur, wenn ich auf contact_screen_array Textview .. .. –

+0

Vielen Dank für Ihr Paar Zeit .... :) –

-1

Try this Ich habe Ihre individuelle Adapter aktualisiert.

public class Custom_Adapter extends BaseAdapter { 

    Context contaxt; 
    String[] Array_text; 
    String[] Array_icon; 
    String concat; 
    LayoutInflater inflater; 

    public Custom_Adapter(Context context,String[] Array_icon, String[] Array_text, String concat) 
    { 
     this.contaxt = context; 
     this.Array_text = Array_text; 
     this.Array_icon = Array_icon; 
     this.concat=concat; 
     inflater = (LayoutInflater)context. 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    @Override 
    public int getCount() { 
     return Array_text.length; 
    } 
    @Override 
    public Object getItem(int position) { 
     return position; 
    } 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 


    @Bind(R.id.Screen_icon) 
    Button Screen_icon; 
    @Bind(R.id.Screen_text) 
    TextView Screen_text; 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View grid; 
     LayoutInflater inflater = (LayoutInflater) contaxt 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      grid = new View(contaxt); 
      grid = inflater.inflate(R.layout.new_app_card_layout, null); 
      ButterKnife.bind(this, grid); 
      Screen_text.setText(Array_text[position]+concat); 
      Screen_icon.setText(Array_icon[position]); 
      Typeface font = Typeface.createFromAsset(contaxt.getAssets(), "fonts/fontawesome-webfont.ttf"); 
      Screen_icon.setTypeface(font); 

      grid.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.d("TAG::",""+position); 
       } 
      }); 

     } else { 
      grid = (View) convertView; 

      grid.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.d("TAG::",""+position); 
       } 
      }); 
     } 
     return grid; 
    } 
} 

Hoffe das hilft dir aus!

+0

Ich habe versucht, aber es funktioniert nicht Kumpel ... das gleiche Problem tritt nur auf, wenn ich auf contact_screen_array Textview .... klicken. –

+1

Sie wollen das selbe getan mit "android: id =" @ + id/Screen_icon "" dieser Knopf ?? –

+0

ja. kann es nicht funktionieren, nur weil "android: id =" @ + id/Screen_icon "Button ist? –

0

Verwendung dieses Verfahren auf einem gridview Artikel für klicken:

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     // your action when gridView item is clicked 

     } 
    }); 
+0

Funktioniert nicht ... :( –

+0

@ JigneshM.Mehta was meinst du nicht funktioniert? Was willst du tun, nachdem Zelle geklickt? Sicher sein, dass Sie den ONITEMclicklistener in der Aktivität, die Ihre Gridview existiert. – babak

+0

Kumpel, danke für die Hilfe Es ist nicht wirklich ein Problem Mein Problem ist, ich benutze Button in Custom Grid. Wenn ich auf ein Raster klicken, dann wird der Code von Grid durch Button-Klick überschrieben, so dass es nicht so gut funktioniert wie ich will Textview statt Button. Dann klappt's gut. Übrigens danke für die Hilfe. Ihr Code funktioniert auch jetzt gut .. :) –

0

Schließlich gelingt es mir. Hier ist der Code.

Verwenden Sie Textview anstelle von Button in // new_app_card_layout.xml.

es einfach aktualisieren,

<TextView 
     android:textSize="35.0sp" 
     android:textColor="@color/newclr" 
     android:layout_gravity="center" 
     android:id="@+id/Screen_icon" 
     android:background="@null" 
     android:padding="20sp" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/fa_icon_contact" 
     android:drawablePadding="5.0dip" 
     android:textAllCaps="false" 
     android:textAlignment="center" /> 

danken Sie so sehr, sie alle um Hilfe ... :)

Verwandte Themen