2017-11-30 1 views
1

Ich habe eine App erstellt, die Informationen über Filme zeigt. Nun, das Problem ist, dass ich keine Markierung setzen oder den Titel fett formatieren kann, wenn der Benutzer auf das Listenansichtselement klickt. So kann der Benutzer wissen, welche Filme er/sie gesehen hat.
Ich habe eine boolesche Variable in der Methode getView() hinzugefügt, aber das hat nicht geholfen, das Problem zu lösen.
Dies ist screenshot meiner App:Wie markiert man ein Listenelement als gelesen?

MainActivity.java

import android.content.Intent; 
import android.graphics.Movie; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ImageView; 
import android.widget.ListView; 
import java.util.ArrayList; 
import java.util.Arrays; 

public class MainActivity extends AppCompatActivity { 
CustomAdapter myadapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    int[] images = {R.drawable.dfg,R.drawable.godf,R.drawable.godf2,R.drawable.thedark,R.drawable.twelv,R.drawable.shindl}; 
    String[] movie_titles = getResources().getStringArray(R.array.Movie_titles); 
    String[] movie_ratings=getResources().getStringArray(R.array.Movie_ratings); 
    String[] movie_janrs=getResources().getStringArray(R.array.Movie_janrs); 
    int[] arrows = {R.drawable.hjk,R.drawable.hjk,R.drawable.hjk,R.drawable.hjk,R.drawable.hjk,R.drawable.hjk}; 
    setContentView(R.layout.activity_main); 
    ListView mylist = (ListView) findViewById(R.id.list); 
    myadapter = new CustomAdapter(this,images,movie_titles,movie_ratings,movie_janrs,arrows); 
    if(mylist!=null){ 
     mylist.setAdapter(myadapter); 
    } 
    mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      if (position==0){ 
       Intent movie1 = new Intent(MainActivity.this,MovieOne.class); 
       startActivity(movie1); 
      } 
     } 
    }); 
} 
} 

CustomAdapter.java

import android.content.Context; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
public class CustomAdapter extends BaseAdapter { 
Context context; 
static LayoutInflater vi=null; 
int[] images; 
String[] movie_titles; 
String[] movie_ratings; 
String[] movie_janrs; 
int[] arrows; 


public CustomAdapter(Context context, int images[], String movie_titles[], String movie_ratings[], String movie_janrs[],int arrows[]){ 
    this.context = context; 
    this.images=images; 
    this.movie_titles=movie_titles; 
    this.movie_ratings=movie_ratings; 
    this.movie_janrs=movie_janrs; 
    this.arrows=arrows; 
} 
@Override 
public int getCount() { 
    return movie_titles.length; 
} 

@Override 
public Object getItem(int position) { 
    return getItemId(position); 
} 

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

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 

    if(convertView ==null){ 
     vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView=vi.inflate(R.layout.custom_layout,null); 
    } 
    if(convertView!=null){ 
     ImageView tvImage = (ImageView) convertView.findViewById(R.id.one); 
     TextView tvTittle = (TextView) convertView.findViewById(R.id.two); 
     TextView tvRating = (TextView) convertView.findViewById(R.id.three); 
     TextView tvJanr = (TextView) convertView.findViewById(R.id.four); 
     ImageView tvImage2 = (ImageView) convertView.findViewById(R.id.six); 
     if(tvImage!=null && tvTittle!=null && tvRating!=null && tvJanr!=null){ 
      tvImage.setImageResource(images[position]); 
      tvTittle.setText(movie_titles[position]); 
      tvRating.setText(movie_ratings[position]); 
      tvJanr.setText(movie_janrs[position]); 
      tvImage2.setImageResource(arrows[position]); 
     } 
    } 
    return convertView; 
} 
} 

MovieOne.java

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

public class MovieOne extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.movie_one); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
} 

@Override 
public boolean onSupportNavigateUp() { 
    finish(); 
    return true; 
} 
} 

Antwort

1

Für Listenelement klicken oder lesen, müssen Sie die Position des Elements klicken klicken.

OnItemClickListener listViewOnItemClick = new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) { 
       mSelectedItem = position; 
       mAdapter.notifyDataSetChanged(); 
     } 
    }; 

und in Ihrer getView() Methode:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final View view = View.inflate(context, R.layout.item_list, null); 

     if (position == mSelectedItem) { 
      // set your color 
     } 

     return view; 
    } 

Glücklich Codierung !!

1

erstellen 'angeklickt' Array von Booleschen Typ mit Länge von movie_titles; initialisieren Sie alle Elemente auf false und übergeben Sie sie an Ihren Adapter. Wenn Sie in Ihrem getView auf ein Element klicken, erhalten Sie dessen Position und setzen Sie das Element auf true

Verwandte Themen