2017-11-30 13 views
1

영화에 대한 정보를 보여주는 앱을 만들었습니다. 이제 사용자가 목록보기 항목을 클릭 할 때마다 마크를 설정하거나 제목을 굵게 표시 할 수 없다는 문제가 있습니다. 따라서 사용자는 시청 한 영화를 알 수 있습니다.
getView() 메소드에 부울 변수를 추가했으나 문제 해결에 도움이되지 못했습니다.
이 내 응용 프로그램의 screenshot입니다 :목록 항목을 읽음으로 표시하는 방법은 무엇입니까?

MovieOne.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; 
} 
} 

MainActivity.java

답변

1

목록 항목을 읽거나 읽으려면 항목 클릭의 위치를 ​​유지해야합니다. 당신의 getView() 방법

OnItemClickListener listViewOnItemClick = new OnItemClickListener() { 

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

및 : 코딩

@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; 
    } 

해피!

1

길이가 movie_titles 인 부울 유형의 '클릭 된'배열을 만듭니다. 모든 항목을 false로 초기화하고 어댑터로 전달하십시오. getView에서 항목을 클릭하면 위치를 가져오고 클릭 된 항목을 true로 설정합니다.