我在ListView
内有一个LinearLayout
,而不是#34;焦点"它是一个有点灰色,但功能齐全,如果我点击一个项目,它是可选择的,但一切都保持相同的浅灰色。我怎样才能改变这一点,使其成为焦点" (或者该术语可能是什么?)
布局的xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/saveButton"
android:layout_width="wrap_content"
android:layout_height="75dp"
android:text="Save" />
<Button
android:id="@+id/cancelButton"
android:layout_width="wrap_content"
android:layout_height="75dp"
android:text="Cancel" />
<Spinner
android:id="@+id/assemblersSpinners"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<Spinner
android:id="@+id/assembliesSpinner"
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_weight="1" />
</LinearLayout>
<ListView
android:id="@+id/assemblyPartsListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
onCreate code
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_premade_assembly);
//lv = (ListView) findViewById(R.id.assemblyPartsListView);
//lv.setAdapter(new CustomPLNViewAdapter(this, partLotNumberList, partNames));
lv = (ListView) findViewById(R.id.assemblyPartsListView);
if(!lv.hasFocus()){
lv.setFocusable(true);
}
listview的自定义适配器
public class CustomCreateAssemblyViewAdapter extends BaseAdapter{
private static ArrayList<ArrayList<String>> partLotNumbersArrayList;
private static ArrayList<String> partNames;
private static String selected;
private LayoutInflater mInflater;
private Context myContext;
public CustomCreateAssemblyViewAdapter(Context context, ArrayList<ArrayList<String>> results, ArrayList<String> parts){
partLotNumbersArrayList = results;
partNames = parts;
mInflater = LayoutInflater.from(context);
myContext = context;
}
@Override
public int getCount() {
return partLotNumbersArrayList.size();
}
@Override
public Object getItem(int position) {
return partLotNumbersArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.view_assembly_parts, null);
holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.partName);
holder.spinner = (Spinner) convertView.findViewById(R.id.LotNumbers);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtName.setText(partNames.get(position));
ArrayAdapter<String> adp1=new ArrayAdapter<String>(myContext, android.R.layout.simple_list_item_1, partLotNumbersArrayList.get(position));
adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//set the adapter to the spinnner
holder.spinner.setAdapter(adp1);
//if there is only one other part besides "" then set that as default part
if(partLotNumbersArrayList.get(position).size() == 2){
holder.spinner.setSelection(1);
}
holder.spinner.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
///ViewOrderlineAssemblyActivity.assembly.addPart(new Part((String)holder.txtName.getText(), ""));
//Log.v("OnNothingSelected", (String)holder.txtName.getText());
}
});
return convertView;
}
static class ViewHolder {
TextView txtName;
Spinner spinner;
}
适配器在此类中设置
class LoadAssemblyParts extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(CreateAssemblyActivity.this);
pDialog.setMessage("Loading assembly parts. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting All orders from url
* */
protected String doInBackground(String... args) {
partLotNumberList = dbUtils.getAllAssemblyParts(assemblyName);
partNames = dbUtils.getAllAssemblyPartNames(assemblyName);
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all orders
pDialog.dismiss();
lv.setAdapter(new CustomCreateAssemblyViewAdapter(getApplicationContext(), partLotNumberList, partNames));
lv.requestFocus();
}
}
答案 0 :(得分:0)
您需要listview的ID
在oncreate中
ListView lv = (ListView) findViewById(R.id.your listview id here)
然后你这样做....
if(!lv.hasFocus()){
lv.setFocusable(true);
lv.requestFocus();
}
答案 1 :(得分:0)
好的,事实证明这与焦点无关,只是因为Android喜欢把事情搞得一团糟。我不得不更改适配器来设置文本颜色。这是解决方案。
ArrayAdapter<String> adp1=new ArrayAdapter<String>(myContext, android.R.layout.simple_list_item_1, partLotNumbersArrayList.get(position)){
@Override
public View getDropDownView(int position, View convertView,android.view.ViewGroup parent){
View v = convertView;
View view = super.getView(position, convertView, parent);
TextView text = (TextView) view.findViewById(android.R.id.text1);
text.setTextColor(Color.BLACK);
text.setBackgroundColor(Color.WHITE);
return view;
}
};