2015-11-02 1 views
0

Я работаю над приложением с вкладками, которым нужна тема для Android-приложений. Я хочу реализовать listview в этом приложении. Тем не менее, мне нужно расширить класс основной деятельности с классом активности AppCombat и классом активности списка, чтобы получить как рабочие, что невозможно в одном классе, насколько я знаю. Я немного застрял здесь, и любая помощь будет оценена по достоинству.Использование App Combat Theme и List View в Android

MainActivity.class

package com.example.TodoList; 

import android.app.AlertDialog; 
import android.app.ListActivity; 
import android.content.ContentValues; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.location.LocationManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListAdapter; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 

import com.example.TodoList.db.TaskContract; 
import com.example.TodoList.db.TaskDBHelper; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private ListAdapter listAdapter; 
    private TaskDBHelper helper; 
    private Toolbar toolbar; 
    private Button btnIconTextTabs; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     updateUI(); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     btnIconTextTabs = (Button) findViewById(R.id.btnIconTextTabs); 
     btnIconTextTabs.setOnClickListener(this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     final EditText inputField = new EditText(this); 
     builder.setNegativeButton("Cancel", null); 


     switch (item.getItemId()) { 
      case R.id.action_add_task: 
       builder.setTitle("Add an article to your shopping list"); 
       builder.setMessage("What would you like to add?"); 
       builder.setView(inputField); 
       builder.setPositiveButton("Add", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         String task = inputField.getText().toString(); 

         helper = new TaskDBHelper(MainActivity.this); 
         SQLiteDatabase db = helper.getWritableDatabase(); 
         ContentValues values = new ContentValues(); 

         values.clear(); 
         values.put(TaskContract.Columns.TASK, task); 

         db.insertWithOnConflict(TaskContract.TABLE, null, values, SQLiteDatabase.CONFLICT_IGNORE); 
         updateUI(); 

        } 
       }); 

       builder.create().show(); 
       return true; 

      case R.id.action_remove_task: 
       builder.setTitle("Remove an article from the shopping list"); 
       builder.setMessage("Did you found this article?"); 
       builder.setNegativeButton("Remove", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         String task = inputField.getText().toString(); 
         helper = new TaskDBHelper(MainActivity.this); 
         SQLiteDatabase db = helper.getWritableDatabase(); 
         ContentValues values = new ContentValues(); 
         values.clear(); 
         updateUI(); 
        } 
       }); 

      case R.id.action_show_mylocation: 
       LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
       Log.d("MyTagGoesHere", "This is my log message at the debug level here"); 
       //Intent intent=new Intent(this,LbsGeocodingActivity.class); 
       //startActivity(intent); 

       Intent GeoLocationIntent = new Intent(MainActivity.this, GeoActivity.class); 
       //myIntent.putExtra("key", value); //Optional parameters 

       MainActivity.this.startActivity(GeoLocationIntent); 




     } 

     builder.create().show(); 
     return true; 

    } 

    private void updateUI() { 
     helper = new TaskDBHelper(MainActivity.this); 
     SQLiteDatabase sqlDB = helper.getReadableDatabase(); 
     Cursor cursor = sqlDB.query(TaskContract.TABLE, 
       new String[]{TaskContract.Columns._ID, TaskContract.Columns.TASK}, 
       null, null, null, null, null); 

     listAdapter = new SimpleCursorAdapter(
       this, 
       R.layout.task_view, 
       cursor, 
       new String[]{TaskContract.Columns.TASK}, 
       new int[]{R.id.taskTextView}, 
       0 
     ); 

     this.setListAdapter(listAdapter); 
    } 

    public void onDoneButtonClick(View view) { 
     View v = (View) view.getParent(); 
     TextView taskTextView = (TextView) v.findViewById(R.id.taskTextView); 
     String task = taskTextView.getText().toString(); 

     String sql = String.format("DELETE FROM %s WHERE %s = '%s'", 
       TaskContract.TABLE, 
       TaskContract.Columns.TASK, 
       task); 


     helper = new TaskDBHelper(MainActivity.this); 
     SQLiteDatabase sqlDB = helper.getWritableDatabase(); 
     sqlDB.execSQL(sql); 
     updateUI(); 
    } 

    public void onSubmitPriceClick(View view) { 
     Intent SubmitPriceIntent = new Intent(MainActivity.this, SubmitPriceActivity.class); 
     MainActivity.this.startActivity(SubmitPriceIntent); 
    } 

    public void onScrollViewButtonClick(View view) { 
     Intent SubmitPriceIntent = new Intent(MainActivity.this, IconTextTabsActivity.class); 
     MainActivity.this.startActivity(SubmitPriceIntent); 
    } 

    public void onWebViewButtonClick(View view) { 
     Intent intent = new 
       Intent(Intent.ACTION_VIEW, 
       Uri.parse("http://www.batprice.com:1337")); 
     startActivity(intent); 
     finish(); 
    } 


    public void onGeoLocationButtonClick(View view) { 
     LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     Log.d("MyTagGoesHere", "This is my log message at the debug level here"); 
     Intent GeoLocationIntent = new Intent(MainActivity.this, GeoActivity.class); 
     MainActivity.this.startActivity(GeoLocationIntent); 
    } 

    @Override 
    public void onClick(View view) { 
     switch (view.getId()) { 
      case R.id.btnIconTextTabs: 
       startActivity(new Intent(MainActivity.this, IconTextTabsActivity.class)); 
       break; 
     } 
    } 
} 

Я получаю сообщение об ошибке «Не удается разрешить метод" setListAdapter (android.widget.ListAdapter).

Как я могу решить эту проблему?

+1

'App Combat' ... Готовы сражаться! –

ответ

4

Вы расширяете AppCompatActivity не ListActivity, AppCompatActivity по существу не реализует ListView, поэтому нет метода setListAdapter(). Вам необходимо либо расширить ListActivity (который не распространяется на AppCompatActivity, так что это может быть нежелательно) или поместите ListView в свой макет и позвоните setAdapter() на ListView. Что-то вроде этого:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ListView listView = (ListView) findViewById(R.id.listview); 
    listView.setAdapter(listAdapter); 

    ... 
} 

Или вы можете использовать android.support.v4.app.ListFragment, которая осуществляется аналогичным образом ListActivity.

+0

Хорошо - так как бы я сделал это в этой деятельности? Когда я импортирую файл android.support.v4.app.ListFragment и расширяю основную активность со списком, я получаю ошибки. –

+0

@ DWA2112 Вы не будете расширять 'ListActivity' * и * импортировать' ListFragment', это было бы так или иначе. У меня есть чувство, что вы хотите пойти с «ListFragment», поэтому измените его на «extends AppCompatActivity». Затем вам нужно создать отдельный класс, который 'extends ListFragment', и добавить этот фрагмент в ваш' MainActivity'. Вот документация по добавлению фрагментов: http://developer.android.com/guide/components/fragments.html – Bryan